diff options
author | René Scharfe <l.s.r@web.de> | 2014-07-01 20:00:01 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-07-01 13:30:50 -0700 |
commit | 80b47854ca84abec991f6fff42dbeb6626588b87 (patch) | |
tree | 62faef6ccfe864c56ce4842a26ccfe100053f7b5 | |
parent | 7bbc4e8fdb33e0a8e42e77cc05460d4c4f615f4d (diff) | |
download | git-80b47854ca84abec991f6fff42dbeb6626588b87.tar.gz |
sha1_file: avoid overrunning alternate object base stringrs/fix-alt-odb-path-comparison
While checking if a new alternate object database is a duplicate make
sure that old and new base paths have the same length before comparing
them with memcmp. This avoids overrunning the buffer of the existing
entry if the new one is longer and it stops rejecting foobar/ after
foo/ was already added.
Signed-off-by: Rene Scharfe <ls.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | sha1_file.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sha1_file.c b/sha1_file.c index 06c809aeeb..dae6433c06 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -303,7 +303,8 @@ static int link_alt_odb_entry(const char *entry, const char *relative_base, int * thing twice, or object directory itself. */ for (alt = alt_odb_list; alt; alt = alt->next) { - if (!memcmp(ent->base, alt->base, pfxlen)) { + if (pfxlen == alt->name - alt->base - 1 && + !memcmp(ent->base, alt->base, pfxlen)) { free(ent); return -1; } |