mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-26 03:42:28 +00:00
Fix memory leak when wrong object type is looked up from cache
Update unit test accordingly : no need to close
This commit is contained in:
parent
80de9ae03c
commit
7d3ec3caac
@ -117,7 +117,10 @@ int git_object_lookup_prefix(git_object **object_out, git_repository *repo, cons
|
|||||||
object = git_cache_get(&repo->objects, id);
|
object = git_cache_get(&repo->objects, id);
|
||||||
if (object != NULL) {
|
if (object != NULL) {
|
||||||
if (type != GIT_OBJ_ANY && type != object->type)
|
if (type != GIT_OBJ_ANY && type != object->type)
|
||||||
|
{
|
||||||
|
git_object_close(object);
|
||||||
return git__throw(GIT_EINVALIDTYPE, "Failed to lookup object. The given type does not match the type on the ODB");
|
return git__throw(GIT_EINVALIDTYPE, "Failed to lookup object. The given type does not match the type on the ODB");
|
||||||
|
}
|
||||||
|
|
||||||
*object_out = object;
|
*object_out = object;
|
||||||
return GIT_SUCCESS;
|
return GIT_SUCCESS;
|
||||||
|
@ -104,9 +104,11 @@ BEGIN_TEST(read1, "read a tree from the repository")
|
|||||||
|
|
||||||
/* GH-86: git_object_lookup() should also check the type if the object comes from the cache */
|
/* GH-86: git_object_lookup() should also check the type if the object comes from the cache */
|
||||||
must_be_true(git_object_lookup(&obj, repo, &id, GIT_OBJ_TREE) == 0);
|
must_be_true(git_object_lookup(&obj, repo, &id, GIT_OBJ_TREE) == 0);
|
||||||
|
must_be_true(obj != NULL);
|
||||||
git_object_close(obj);
|
git_object_close(obj);
|
||||||
|
obj = NULL;
|
||||||
must_be_true(git_object_lookup(&obj, repo, &id, GIT_OBJ_BLOB) == GIT_EINVALIDTYPE);
|
must_be_true(git_object_lookup(&obj, repo, &id, GIT_OBJ_BLOB) == GIT_EINVALIDTYPE);
|
||||||
git_object_close(obj);
|
must_be_true(obj == NULL);
|
||||||
|
|
||||||
entry = git_tree_entry_byname(tree, "README");
|
entry = git_tree_entry_byname(tree, "README");
|
||||||
must_be_true(entry != NULL);
|
must_be_true(entry != NULL);
|
||||||
@ -114,6 +116,7 @@ BEGIN_TEST(read1, "read a tree from the repository")
|
|||||||
must_be_true(strcmp(git_tree_entry_name(entry), "README") == 0);
|
must_be_true(strcmp(git_tree_entry_name(entry), "README") == 0);
|
||||||
|
|
||||||
must_pass(git_tree_entry_2object(&obj, repo, entry));
|
must_pass(git_tree_entry_2object(&obj, repo, entry));
|
||||||
|
must_be_true(obj != NULL);
|
||||||
|
|
||||||
git_object_close(obj);
|
git_object_close(obj);
|
||||||
git_tree_close(tree);
|
git_tree_close(tree);
|
||||||
|
Loading…
Reference in New Issue
Block a user