odb: free object data when id is ambiguous

By the time we recognise this as an ambiguous id, the object's data
has been loaded into memory. Free it when returning EABMIGUOUS.
This commit is contained in:
Carlos Martín Nieto 2013-08-12 11:50:27 +02:00
parent 8ca093991d
commit e54cfb9b54
2 changed files with 4 additions and 1 deletions

View File

@ -786,8 +786,10 @@ attempt_lookup:
git__free(data);
data = raw.data;
if (found && git_oid__cmp(&full_oid, &found_full_oid))
if (found && git_oid__cmp(&full_oid, &found_full_oid)) {
git__free(raw.data);
return git_odb__error_ambiguous("multiple matches for prefix");
}
found_full_oid = full_oid;
found = true;

View File

@ -22,6 +22,7 @@ void test_odb_mixed__dup_oid(void) {
cl_git_pass(git_oid_fromstr(&oid, hex));
cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, GIT_OID_HEXSZ));
git_odb_object_free(obj);
cl_git_pass(git_oid_fromstrn(&oid, short_hex, sizeof(short_hex) - 1));
cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, sizeof(short_hex) - 1));
git_odb_object_free(obj);