odb_read_prefix: reset error in backends loop#4264
Merged
Conversation
When looking for an object by prefix, we query all the backends so that we can ensure that there is no ambiguity. We need to reset the `error` value between backends; otherwise the first backend may find an object by prefix, but subsequent backends may not. If we do not reset the `error` value then it will remain at `GIT_ENOTFOUND` and `read_prefix_1` will fail, despite having actually found an object.
Merged
Member
|
Looks good as is. I wrote a test which segfaults due to this issue in #4265. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When looking for an object by prefix, we query all the backends so that we can ensure that there is no ambiguity. We need to reset the
errorvalue between backends; otherwise the first backend may find an object by prefix, but subsequent backends may not. If we do not reset theerrorvalue then it will remain atGIT_ENOTFOUNDandread_prefix_1will fail, despite having actually found an object.LibGit2Sharp creates such a scenario in its tests: it sets up its own custom ODB backend, then adds an object and looks that object up again by a prefix.