Commit e54cfb9b by Carlos Martín Nieto

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.
parent 8ca09399
...@@ -786,8 +786,10 @@ attempt_lookup: ...@@ -786,8 +786,10 @@ attempt_lookup:
git__free(data); git__free(data);
data = raw.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"); return git_odb__error_ambiguous("multiple matches for prefix");
}
found_full_oid = full_oid; found_full_oid = full_oid;
found = true; found = true;
......
...@@ -22,6 +22,7 @@ void test_odb_mixed__dup_oid(void) { ...@@ -22,6 +22,7 @@ void test_odb_mixed__dup_oid(void) {
cl_git_pass(git_oid_fromstr(&oid, hex)); cl_git_pass(git_oid_fromstr(&oid, hex));
cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, GIT_OID_HEXSZ)); 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_oid_fromstrn(&oid, short_hex, sizeof(short_hex) - 1));
cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, sizeof(short_hex) - 1)); cl_git_pass(git_odb_read_prefix(&obj, _odb, &oid, sizeof(short_hex) - 1));
git_odb_object_free(obj); git_odb_object_free(obj);
......
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