Commit c06e0003 by Carlos Martín Nieto

odb: don't leak when detecting id ambiguity

If we find several objects with the same prefix, we need to free the
memory where we stored the earlier object. Keep track of the raw.data
pointer across read_prefix calls and free it if we find another
object.
parent cdca82c7
...@@ -559,6 +559,7 @@ int git_odb_read_prefix( ...@@ -559,6 +559,7 @@ int git_odb_read_prefix(
int error = GIT_ENOTFOUND; int error = GIT_ENOTFOUND;
git_oid found_full_oid = {{0}}; git_oid found_full_oid = {{0}};
git_rawobj raw; git_rawobj raw;
void *data = NULL;
bool found = false; bool found = false;
assert(out && db); assert(out && db);
...@@ -588,6 +589,8 @@ int git_odb_read_prefix( ...@@ -588,6 +589,8 @@ int git_odb_read_prefix(
if (error) if (error)
return error; return error;
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))
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;
......
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