diff options
| author | Carlos Martín Nieto <cmn@dwim.me> | 2013-08-12 11:50:27 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@dwim.me> | 2013-08-12 11:50:27 +0200 |
| commit | e54cfb9b544eeac2924f45fc7752c2a7be709a03 (patch) | |
| tree | 159b376f5ca1c53eccd90b73c321a000a0941e0c | |
| parent | 8ca093991d3105e62a6f509e9763c1f72040e1c7 (diff) | |
| download | libgit2-e54cfb9b544eeac2924f45fc7752c2a7be709a03.tar.gz | |
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.
| -rw-r--r-- | src/odb.c | 4 | ||||
| -rw-r--r-- | tests-clar/odb/mixed.c | 1 |
2 files changed, 4 insertions, 1 deletions
@@ -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; diff --git a/tests-clar/odb/mixed.c b/tests-clar/odb/mixed.c index dd4587831..51970ceec 100644 --- a/tests-clar/odb/mixed.c +++ b/tests-clar/odb/mixed.c @@ -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); |
