link_alt_odb_entry: fix read over array bounds reported by valgrind
authorHeiko Voigt <hvoigt@hvoigt.net>
Sat, 28 Jul 2012 15:46:36 +0000 (17:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Jul 2012 01:02:51 +0000 (18:02 -0700)
pfxlen can be longer than the path in objdir when relative_base
contains the path to gits object directory.  Here we are interested
in checking if ent->base[] (the part that corresponds to .git/objects)
is the same string as objdir, and the code NUL-terminated ent->base[]
to

LEADING PATH\0XX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\0

in preparation for these "duplicate check" step (before we return
from the function, the first NUL is turned into '/' so that we can
fill XX when probing for loose objects).  All we need to do is to
compare the string with the path to our object directory.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_file.c

index 4f06a0e450359744528d3b125fb09eacebf1eb4a..a1f3bee5ed4811dc543136ed465491ea239196e8 100644 (file)
@@ -298,7 +298,7 @@ static int link_alt_odb_entry(const char * entry, int len, const char * relative
                        return -1;
                }
        }
-       if (!memcmp(ent->base, objdir, pfxlen)) {
+       if (!strcmp(ent->base, objdir)) {
                free(ent);
                return -1;
        }