Michael Haggerty [off-list ref] writes:
static int resolve_gitlink_packed_ref(char *name, int pathlen, const
char *refname, unsigned char *result)
{
int retval = -1;
struct ref_entry *ref;
struct ref_array *array = get_packed_refs(name);
ref = search_ref_array(array, refname);
if (ref != NULL) {
memcpy(result, ref->sha1, 20);
retval = 0;
}
return retval;
}
The problem is that the parameter "name" is not NUL-terminated. The old
code turned it into a (NUL-terminated) filename via
strcpy(name + pathlen, "packed-refs");
but the new code passes it (unterminated) to get_packed_refs()
Thanks for digging this through before I got to it. Very much appreciated,
and sorry or the mismerge (incidentally this was why I wanted to merge
early these two topics that tried to improve different things that
happened to touch the same part of the code, as I knew such a merge was
risky and needed plenty time before it hits released versions).