diff options
| author | Carlos Martín Nieto <cmn@elego.de> | 2011-05-24 15:24:45 +0200 |
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2011-06-01 18:54:56 +0200 |
| commit | a02fc2cd16b5d45466733a1c4f027def4f5ee24c (patch) | |
| tree | 3c65d99b63d66003340095bc912864631ed35dff /src/index.c | |
| parent | cdd9fd473ec96766897fab73c1837c178619409f (diff) | |
| download | libgit2-a02fc2cd16b5d45466733a1c4f027def4f5ee24c.tar.gz | |
index: correctly parse invalidated TREE extensions
A TREE extension with an entry count of -1 means that it was
invalidated and we should ignore it. Do so instead of returning an
error.
This fixes issue #202
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
Diffstat (limited to 'src/index.c')
| -rw-r--r-- | src/index.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/index.c b/src/index.c index 0da2e18b8..b49ed196d 100644 --- a/src/index.c +++ b/src/index.c @@ -520,11 +520,20 @@ static int read_tree_internal(git_index_tree **out, /* Blank-terminated ASCII decimal number of entries in this tree */ if (git__strtol32(&count, buffer, &buffer, 10) < GIT_SUCCESS || - count < 0) { + count < -1) { error = GIT_EOBJCORRUPTED; goto exit; } + /* Invalidated TREE. Free the tree but report success */ + if (count == -1) { + buffer = buffer_end; + free_tree(tree); /* Needs to be done manually */ + tree = NULL; + error = GIT_SUCCESS; + goto exit; + } + tree->entries = (size_t)count; if (*buffer != ' ' || ++buffer >= buffer_end) { |
