mirror of
https://github.com/git/git
synced 2024-11-05 18:59:29 +00:00
Make sure get_sha1 does not accept ambiguous sha1 prefix (again).
The earlier fix incorrectly dropped the code the original had to ensure the found SHA1 is at least unique within the same pack. Restore the check. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
619e5a0ed4
commit
0bc4589020
1 changed files with 15 additions and 6 deletions
13
sha1_name.c
13
sha1_name.c
|
@ -91,9 +91,12 @@ static int find_short_packed_object(int len, const unsigned char *match, unsigne
|
|||
last = mid;
|
||||
}
|
||||
if (first < num) {
|
||||
unsigned char now[20];
|
||||
unsigned char now[20], next[20];
|
||||
nth_packed_object_sha1(p, first, now);
|
||||
if (match_sha(len, match, now)) {
|
||||
if (nth_packed_object_sha1(p, first+1, next) ||
|
||||
!match_sha(len, match, next)) {
|
||||
/* unique within this pack */
|
||||
if (!found) {
|
||||
memcpy(found_sha1, now, 20);
|
||||
found++;
|
||||
|
@ -103,6 +106,12 @@ static int find_short_packed_object(int len, const unsigned char *match, unsigne
|
|||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* not even unique within this pack */
|
||||
found = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found == 1)
|
||||
|
@ -121,7 +130,7 @@ static int find_unique_short_object(int len, char *canonical,
|
|||
if (!has_unpacked && !has_packed)
|
||||
return -1;
|
||||
if (1 < has_unpacked || 1 < has_packed)
|
||||
return -1;
|
||||
return error("short SHA1 %.*s is ambiguous.", len, canonical);
|
||||
if (has_unpacked != has_packed) {
|
||||
memcpy(sha1, (has_packed ? packed_sha1 : unpacked_sha1), 20);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue