Commit 969d4b70 by Carlos Martín Nieto

object: correct the expected ID size in prefix lookup

We take in a possibly partial ID by taking a length and working off of
that to figure out whether to just look up the object or ask the
backends for a prefix lookup.

Unfortunately we've been checking the size against `GIT_OID_HEXSZ` which
is the size of a *string* containing a full ID, whereas we need to check
against the size we can have when it's a 20-byte array.

Change the checks and comment to use `GIT_OID_RAWSZ` which is the
correct size of a git_oid to have when full.
parent 878293f7
......@@ -129,10 +129,10 @@ int git_object_lookup_prefix(
if (error < 0)
return error;
if (len > GIT_OID_HEXSZ)
len = GIT_OID_HEXSZ;
if (len > GIT_OID_RAWSZ)
len = GIT_OID_RAWSZ;
if (len == GIT_OID_HEXSZ) {
if (len == GIT_OID_RAWSZ) {
git_cached_obj *cached = NULL;
/* We want to match the full id : we can first look up in the cache,
......@@ -172,9 +172,9 @@ int git_object_lookup_prefix(
memcpy(short_oid.id, id->id, (len + 1) / 2);
if (len % 2)
short_oid.id[len / 2] &= 0xF0;
memset(short_oid.id + (len + 1) / 2, 0, (GIT_OID_HEXSZ - len) / 2);
memset(short_oid.id + (len + 1) / 2, 0, (GIT_OID_RAWSZ - len) / 2);
/* If len < GIT_OID_HEXSZ (a strict short oid was given), we have
/* If len < GIT_OID_RAWSZ (a strict short oid was given), we have
* 2 options :
* - We always search in the cache first. If we find that short oid is
* ambiguous, we can stop. But in all the other cases, we must then
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment