mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 13:04:42 +00:00
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.
This commit is contained in:
parent
878293f7e1
commit
969d4b703c
10
src/object.c
10
src/object.c
@ -129,10 +129,10 @@ int git_object_lookup_prefix(
|
|||||||
if (error < 0)
|
if (error < 0)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
if (len > GIT_OID_HEXSZ)
|
if (len > GIT_OID_RAWSZ)
|
||||||
len = GIT_OID_HEXSZ;
|
len = GIT_OID_RAWSZ;
|
||||||
|
|
||||||
if (len == GIT_OID_HEXSZ) {
|
if (len == GIT_OID_RAWSZ) {
|
||||||
git_cached_obj *cached = NULL;
|
git_cached_obj *cached = NULL;
|
||||||
|
|
||||||
/* We want to match the full id : we can first look up in the cache,
|
/* 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);
|
memcpy(short_oid.id, id->id, (len + 1) / 2);
|
||||||
if (len % 2)
|
if (len % 2)
|
||||||
short_oid.id[len / 2] &= 0xF0;
|
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 :
|
* 2 options :
|
||||||
* - We always search in the cache first. If we find that short oid is
|
* - 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
|
* ambiguous, we can stop. But in all the other cases, we must then
|
||||||
|
Loading…
Reference in New Issue
Block a user