mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-17 04:59:22 +00:00
Reset all static variables to NULL in clar's __cleanup
Without this change, any failed assertion in the second (or a later) test inside a test suite has a chance of double deleting memory, resulting in a heap corruption. See #1096 for details. This leaves alone the test cases where we "just" use cl_git_sandbox_init() and cl_git_sandbox_cleanup(). These methods already take good care to not double delete a repository. Fixes #1096
This commit is contained in:
parent
5cf1b4f094
commit
9094d30b93
@ -18,6 +18,7 @@ void test_checkout_tree__initialize(void)
|
||||
void test_checkout_tree__cleanup(void)
|
||||
{
|
||||
git_object_free(g_object);
|
||||
g_object = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
@ -17,8 +17,10 @@ void test_clone_network__initialize(void)
|
||||
|
||||
static void cleanup_repository(void *path)
|
||||
{
|
||||
if (g_repo)
|
||||
if (g_repo) {
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
cl_fixture_cleanup((const char *)path);
|
||||
}
|
||||
|
||||
|
@ -14,8 +14,11 @@ void test_clone_nonetwork__initialize(void)
|
||||
|
||||
static void cleanup_repository(void *path)
|
||||
{
|
||||
if (g_repo)
|
||||
if (g_repo) {
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
|
||||
cl_fixture_cleanup((const char *)path);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,8 @@ void test_commit_commit__initialize(void)
|
||||
void test_commit_commit__cleanup(void)
|
||||
{
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,10 @@ void test_commit_parent__initialize(void)
|
||||
void test_commit_parent__cleanup(void)
|
||||
{
|
||||
git_commit_free(commit);
|
||||
commit = NULL;
|
||||
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
}
|
||||
|
||||
static void assert_nth_gen_parent(unsigned int gen, const char *expected_oid)
|
||||
|
@ -17,16 +17,22 @@ void test_commit_write__initialize(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("testrepo");
|
||||
}
|
||||
|
||||
void test_commit_write__cleanup(void)
|
||||
{
|
||||
git_reference_free(head);
|
||||
git_reference_free(branch);
|
||||
git_reference_free(head);
|
||||
head = NULL;
|
||||
|
||||
git_commit_free(commit);
|
||||
git_reference_free(branch);
|
||||
branch = NULL;
|
||||
|
||||
git__free(head_old);
|
||||
git_commit_free(commit);
|
||||
commit = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
git__free(head_old);
|
||||
head_old = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,6 +29,7 @@ void test_core_env__cleanup(void)
|
||||
#ifdef GIT_WIN32
|
||||
git__free(env_save[i]);
|
||||
#endif
|
||||
env_save[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,10 @@ void test_diff_blob__initialize(void)
|
||||
void test_diff_blob__cleanup(void)
|
||||
{
|
||||
git_blob_free(d);
|
||||
d = NULL;
|
||||
|
||||
git_blob_free(alien);
|
||||
alien = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
@ -18,8 +18,11 @@ void test_fetchhead_network__initialize(void)
|
||||
|
||||
static void cleanup_repository(void *path)
|
||||
{
|
||||
if (g_repo)
|
||||
if (g_repo) {
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
|
||||
cl_fixture_cleanup((const char *)path);
|
||||
}
|
||||
|
||||
|
@ -15,8 +15,11 @@ void test_fetchhead_nonetwork__initialize(void)
|
||||
|
||||
static void cleanup_repository(void *path)
|
||||
{
|
||||
if (g_repo)
|
||||
if (g_repo) {
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
|
||||
cl_fixture_cleanup((const char *)path);
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,8 @@ void test_index_conflicts__initialize(void)
|
||||
void test_index_conflicts__cleanup(void)
|
||||
{
|
||||
git_index_free(repo_index);
|
||||
repo_index = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,8 @@ void test_index_reuc__initialize(void)
|
||||
void test_index_reuc__cleanup(void)
|
||||
{
|
||||
git_index_free(repo_index);
|
||||
repo_index = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,8 @@ void test_index_stage__initialize(void)
|
||||
void test_index_stage__cleanup(void)
|
||||
{
|
||||
git_index_free(repo_index);
|
||||
repo_index = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,11 @@ void test_network_createremotethenload__initialize(void)
|
||||
void test_network_createremotethenload__cleanup(void)
|
||||
{
|
||||
git_remote_free(_remote);
|
||||
_remote = NULL;
|
||||
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,8 @@ void test_network_fetch__initialize(void)
|
||||
void test_network_fetch__cleanup(void)
|
||||
{
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("./fetch");
|
||||
}
|
||||
|
||||
|
@ -15,9 +15,14 @@ void test_network_remotelocal__initialize(void)
|
||||
|
||||
void test_network_remotelocal__cleanup(void)
|
||||
{
|
||||
git_remote_free(remote);
|
||||
git_buf_free(&file_path_buf);
|
||||
|
||||
git_remote_free(remote);
|
||||
remote = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("remotelocal");
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@ void test_network_remoterename__initialize(void)
|
||||
void test_network_remoterename__cleanup(void)
|
||||
{
|
||||
git_remote_free(_remote);
|
||||
_remote = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
@ -20,6 +20,8 @@ void test_network_remotes__initialize(void)
|
||||
void test_network_remotes__cleanup(void)
|
||||
{
|
||||
git_remote_free(_remote);
|
||||
_remote = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,8 @@ void test_notes_notes__initialize(void)
|
||||
void test_notes_notes__cleanup(void)
|
||||
{
|
||||
git_signature_free(_sig);
|
||||
_sig = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -16,10 +16,17 @@ void test_notes_notesref__initialize(void)
|
||||
void test_notes_notesref__cleanup(void)
|
||||
{
|
||||
git_note_free(_note);
|
||||
_note = NULL;
|
||||
|
||||
git_signature_free(_sig);
|
||||
_sig = NULL;
|
||||
|
||||
git_config_free(_cfg);
|
||||
_cfg = NULL;
|
||||
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,8 @@ void test_object_commit_commitstagedfile__initialize(void)
|
||||
void test_object_commit_commitstagedfile__cleanup(void)
|
||||
{
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("treebuilder");
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,8 @@ void test_object_lookup__initialize(void)
|
||||
|
||||
void test_object_lookup__cleanup(void)
|
||||
{
|
||||
git_repository_free(g_repo);
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
|
||||
void test_object_lookup__lookup_wrong_type_returns_enotfound(void)
|
||||
|
@ -10,6 +10,7 @@ void test_object_peel__initialize(void)
|
||||
void test_object_peel__cleanup(void)
|
||||
{
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
|
||||
static void assert_peel(
|
||||
|
@ -14,8 +14,13 @@ void test_object_tag_peel__initialize(void)
|
||||
void test_object_tag_peel__cleanup(void)
|
||||
{
|
||||
git_tag_free(tag);
|
||||
tag = NULL;
|
||||
|
||||
git_object_free(target);
|
||||
target = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
@ -19,7 +19,10 @@ void test_object_tree_frompath__initialize(void)
|
||||
void test_object_tree_frompath__cleanup(void)
|
||||
{
|
||||
git_tree_free(tree);
|
||||
tree = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
}
|
||||
|
||||
static void assert_tree_from_path(
|
||||
|
@ -11,6 +11,7 @@ void test_odb_mixed__initialize(void)
|
||||
void test_odb_mixed__cleanup(void)
|
||||
{
|
||||
git_odb_free(_odb);
|
||||
_odb = NULL;
|
||||
}
|
||||
|
||||
void test_odb_mixed__dup_oid(void) {
|
||||
|
@ -12,6 +12,7 @@ void test_odb_packed__initialize(void)
|
||||
void test_odb_packed__cleanup(void)
|
||||
{
|
||||
git_odb_free(_odb);
|
||||
_odb = NULL;
|
||||
}
|
||||
|
||||
void test_odb_packed__mass_read(void)
|
||||
|
@ -17,6 +17,7 @@ void test_odb_packed_one__initialize(void)
|
||||
void test_odb_packed_one__cleanup(void)
|
||||
{
|
||||
git_odb_free(_odb);
|
||||
_odb = NULL;
|
||||
}
|
||||
|
||||
void test_odb_packed_one__mass_read(void)
|
||||
|
@ -7,6 +7,7 @@ static git_revwalk *_revwalker;
|
||||
static git_packbuilder *_packbuilder;
|
||||
static git_indexer *_indexer;
|
||||
static git_vector _commits;
|
||||
static int _commits_is_initialized;
|
||||
|
||||
void test_pack_packbuilder__initialize(void)
|
||||
{
|
||||
@ -14,6 +15,7 @@ void test_pack_packbuilder__initialize(void)
|
||||
cl_git_pass(git_revwalk_new(&_revwalker, _repo));
|
||||
cl_git_pass(git_packbuilder_new(&_packbuilder, _repo));
|
||||
cl_git_pass(git_vector_init(&_commits, 0, NULL));
|
||||
_commits_is_initialized = 1;
|
||||
}
|
||||
|
||||
void test_pack_packbuilder__cleanup(void)
|
||||
@ -21,15 +23,25 @@ void test_pack_packbuilder__cleanup(void)
|
||||
git_oid *o;
|
||||
unsigned int i;
|
||||
|
||||
git_vector_foreach(&_commits, i, o) {
|
||||
git__free(o);
|
||||
if (_commits_is_initialized) {
|
||||
_commits_is_initialized = 0;
|
||||
git_vector_foreach(&_commits, i, o) {
|
||||
git__free(o);
|
||||
}
|
||||
git_vector_free(&_commits);
|
||||
}
|
||||
git_vector_free(&_commits);
|
||||
|
||||
git_packbuilder_free(_packbuilder);
|
||||
_packbuilder = NULL;
|
||||
|
||||
git_revwalk_free(_revwalker);
|
||||
_revwalker = NULL;
|
||||
|
||||
git_indexer_free(_indexer);
|
||||
_indexer = NULL;
|
||||
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
}
|
||||
|
||||
static void seed_packbuilder(void)
|
||||
|
@ -16,9 +16,13 @@ void test_refs_branches_create__initialize(void)
|
||||
void test_refs_branches_create__cleanup(void)
|
||||
{
|
||||
git_reference_free(branch);
|
||||
branch = NULL;
|
||||
|
||||
git_object_free(target);
|
||||
target = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
@ -20,7 +20,10 @@ void test_refs_branches_delete__initialize(void)
|
||||
void test_refs_branches_delete__cleanup(void)
|
||||
{
|
||||
git_reference_free(fake_remote);
|
||||
fake_remote = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
@ -18,7 +18,10 @@ void test_refs_branches_foreach__initialize(void)
|
||||
void test_refs_branches_foreach__cleanup(void)
|
||||
{
|
||||
git_reference_free(fake_remote);
|
||||
fake_remote = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
@ -13,7 +13,10 @@ void test_refs_branches_ishead__initialize(void)
|
||||
void test_refs_branches_ishead__cleanup(void)
|
||||
{
|
||||
git_reference_free(branch);
|
||||
branch = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
}
|
||||
|
||||
void test_refs_branches_ishead__can_tell_if_a_branch_is_pointed_at_by_HEAD(void)
|
||||
|
@ -14,8 +14,10 @@ void test_refs_branches_lookup__initialize(void)
|
||||
void test_refs_branches_lookup__cleanup(void)
|
||||
{
|
||||
git_reference_free(branch);
|
||||
branch = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
}
|
||||
|
||||
void test_refs_branches_lookup__can_retrieve_a_local_branch(void)
|
||||
|
@ -15,6 +15,8 @@ void test_refs_branches_move__initialize(void)
|
||||
void test_refs_branches_move__cleanup(void)
|
||||
{
|
||||
git_reference_free(ref);
|
||||
ref = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -14,8 +14,10 @@ void test_refs_branches_tracking__initialize(void)
|
||||
void test_refs_branches_tracking__cleanup(void)
|
||||
{
|
||||
git_reference_free(branch);
|
||||
branch = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
}
|
||||
|
||||
void test_refs_branches_tracking__can_retrieve_the_remote_tracking_reference_of_a_local_branch(void)
|
||||
|
@ -18,7 +18,10 @@ void test_refs_foreachglob__initialize(void)
|
||||
void test_refs_foreachglob__cleanup(void)
|
||||
{
|
||||
git_reference_free(fake_remote);
|
||||
fake_remote = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ void test_refs_peel__initialize(void)
|
||||
void test_refs_peel__cleanup(void)
|
||||
{
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
|
||||
static void assert_peel(
|
||||
|
@ -22,6 +22,7 @@ void test_refs_read__initialize(void)
|
||||
void test_refs_read__cleanup(void)
|
||||
{
|
||||
git_repository_free(g_repo);
|
||||
g_repo = NULL;
|
||||
}
|
||||
|
||||
void test_refs_read__loose_tag(void)
|
||||
|
@ -22,6 +22,7 @@ void test_refs_reflog_drop__initialize(void)
|
||||
void test_refs_reflog_drop__cleanup(void)
|
||||
{
|
||||
git_reflog_free(g_reflog);
|
||||
g_reflog = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ void test_refs_unicode__initialize(void)
|
||||
void test_refs_unicode__cleanup(void)
|
||||
{
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include "repo_helpers.h"
|
||||
#include "posix.h"
|
||||
|
||||
git_repository *repo;
|
||||
static git_repository *repo;
|
||||
|
||||
void test_repo_head__initialize(void)
|
||||
{
|
||||
|
@ -19,6 +19,8 @@ void test_repo_init__initialize(void)
|
||||
static void cleanup_repository(void *path)
|
||||
{
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
|
||||
cl_fixture_cleanup((const char *)path);
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,8 @@ void test_repo_setters__initialize(void)
|
||||
void test_repo_setters__cleanup(void)
|
||||
{
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_fixture_cleanup("testrepo.git");
|
||||
cl_fixture_cleanup("new_workdir");
|
||||
}
|
||||
|
@ -16,6 +16,8 @@ void test_reset_hard__initialize(void)
|
||||
void test_reset_hard__cleanup(void)
|
||||
{
|
||||
git_object_free(target);
|
||||
target = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,8 @@ void test_reset_mixed__initialize(void)
|
||||
void test_reset_mixed__cleanup(void)
|
||||
{
|
||||
git_object_free(target);
|
||||
target = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,8 @@ void test_reset_soft__initialize(void)
|
||||
void test_reset_soft__cleanup(void)
|
||||
{
|
||||
git_object_free(target);
|
||||
target = NULL;
|
||||
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,9 @@ void test_revwalk_basic__initialize(void)
|
||||
void test_revwalk_basic__cleanup(void)
|
||||
{
|
||||
git_revwalk_free(_walk);
|
||||
_walk = NULL;
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
}
|
||||
|
||||
void test_revwalk_basic__sorting_modes(void)
|
||||
|
@ -12,6 +12,7 @@ void test_revwalk_mergebase__initialize(void)
|
||||
void test_revwalk_mergebase__cleanup(void)
|
||||
{
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
}
|
||||
|
||||
void test_revwalk_mergebase__single1(void)
|
||||
|
@ -12,7 +12,10 @@ void test_revwalk_signatureparsing__initialize(void)
|
||||
void test_revwalk_signatureparsing__cleanup(void)
|
||||
{
|
||||
git_revwalk_free(_walk);
|
||||
_walk = NULL;
|
||||
|
||||
git_repository_free(_repo);
|
||||
_repo = NULL;
|
||||
}
|
||||
|
||||
void test_revwalk_signatureparsing__do_not_choke_when_name_contains_angle_brackets(void)
|
||||
|
@ -14,7 +14,11 @@ void test_stash_drop__initialize(void)
|
||||
void test_stash_drop__cleanup(void)
|
||||
{
|
||||
git_signature_free(signature);
|
||||
signature = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_git_pass(git_futils_rmdir_r("stash", NULL, GIT_RMDIR_REMOVE_FILES));
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,11 @@ void test_stash_foreach__initialize(void)
|
||||
void test_stash_foreach__cleanup(void)
|
||||
{
|
||||
git_signature_free(signature);
|
||||
signature = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_git_pass(git_futils_rmdir_r(REPO_NAME, NULL, GIT_RMDIR_REMOVE_FILES));
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,11 @@ void test_stash_save__initialize(void)
|
||||
void test_stash_save__cleanup(void)
|
||||
{
|
||||
git_signature_free(signature);
|
||||
signature = NULL;
|
||||
|
||||
git_repository_free(repo);
|
||||
repo = NULL;
|
||||
|
||||
cl_git_pass(git_futils_rmdir_r("stash", NULL, GIT_RMDIR_REMOVE_FILES));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user