mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 11:25:52 +00:00 
			
		
		
		
	 9094d30b93
			
		
	
	
		9094d30b93
		
	
	
	
	
		
			
			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
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "clar_libgit2.h"
 | |
| 
 | |
| #include "repository.h"
 | |
| #include "fetchhead.h"
 | |
| #include "fetchhead_data.h"
 | |
| 
 | |
| #define DO_LOCAL_TEST 0
 | |
| 
 | |
| static git_repository *g_repo;
 | |
| 
 | |
| void test_fetchhead_nonetwork__initialize(void)
 | |
| {
 | |
| 	g_repo = NULL;
 | |
| }
 | |
| 
 | |
| static void cleanup_repository(void *path)
 | |
| {
 | |
| 	if (g_repo) {
 | |
| 		git_repository_free(g_repo);
 | |
| 		g_repo = NULL;
 | |
| 	}
 | |
| 
 | |
| 	cl_fixture_cleanup((const char *)path);
 | |
| }
 | |
| 
 | |
| void test_fetchhead_nonetwork__write(void)
 | |
| {
 | |
| 	git_vector fetchhead_vector;
 | |
| 	git_fetchhead_ref *fetchhead[6];
 | |
| 	git_oid oid[6];
 | |
| 	git_buf fetchhead_buf = GIT_BUF_INIT;
 | |
| 	size_t i;
 | |
| 	int equals = 0;
 | |
| 
 | |
| 	git_vector_init(&fetchhead_vector, 6, NULL);
 | |
| 
 | |
| 	cl_set_cleanup(&cleanup_repository, "./test1");
 | |
| 
 | |
| 	cl_git_pass(git_repository_init(&g_repo, "./test1", 0));
 | |
| 
 | |
| 	cl_git_pass(git_oid_fromstr(&oid[0],
 | |
| 		"49322bb17d3acc9146f98c97d078513228bbf3c0"));
 | |
| 	cl_git_pass(git_fetchhead_ref_create(&fetchhead[0], &oid[0], 1,
 | |
| 		"refs/heads/master",
 | |
| 		"git://github.com/libgit2/TestGitRepository"));
 | |
| 	cl_git_pass(git_vector_insert(&fetchhead_vector, fetchhead[0]));
 | |
| 
 | |
| 	cl_git_pass(git_oid_fromstr(&oid[1],
 | |
| 		"0966a434eb1a025db6b71485ab63a3bfbea520b6"));
 | |
| 	cl_git_pass(git_fetchhead_ref_create(&fetchhead[1], &oid[1], 0,
 | |
| 		"refs/heads/first-merge",
 | |
| 		"git://github.com/libgit2/TestGitRepository"));
 | |
| 	cl_git_pass(git_vector_insert(&fetchhead_vector, fetchhead[1]));
 | |
| 
 | |
| 	cl_git_pass(git_oid_fromstr(&oid[2],
 | |
| 		"42e4e7c5e507e113ebbb7801b16b52cf867b7ce1"));
 | |
| 	cl_git_pass(git_fetchhead_ref_create(&fetchhead[2], &oid[2], 0,
 | |
| 		"refs/heads/no-parent",
 | |
| 		"git://github.com/libgit2/TestGitRepository"));
 | |
| 	cl_git_pass(git_vector_insert(&fetchhead_vector, fetchhead[2]));
 | |
| 
 | |
| 	cl_git_pass(git_oid_fromstr(&oid[3],
 | |
| 		"d96c4e80345534eccee5ac7b07fc7603b56124cb"));
 | |
| 	cl_git_pass(git_fetchhead_ref_create(&fetchhead[3], &oid[3], 0,
 | |
| 		"refs/tags/annotated_tag",
 | |
| 		"git://github.com/libgit2/TestGitRepository"));
 | |
| 	cl_git_pass(git_vector_insert(&fetchhead_vector, fetchhead[3]));
 | |
| 
 | |
| 	cl_git_pass(git_oid_fromstr(&oid[4],
 | |
| 		"55a1a760df4b86a02094a904dfa511deb5655905"));
 | |
| 	cl_git_pass(git_fetchhead_ref_create(&fetchhead[4], &oid[4], 0,
 | |
| 		"refs/tags/blob",
 | |
| 		"git://github.com/libgit2/TestGitRepository"));
 | |
| 	cl_git_pass(git_vector_insert(&fetchhead_vector, fetchhead[4]));
 | |
| 
 | |
| 	cl_git_pass(git_oid_fromstr(&oid[5],
 | |
| 		"8f50ba15d49353813cc6e20298002c0d17b0a9ee"));
 | |
| 	cl_git_pass(git_fetchhead_ref_create(&fetchhead[5], &oid[5], 0,
 | |
| 		"refs/tags/commit_tree",
 | |
| 		"git://github.com/libgit2/TestGitRepository"));
 | |
| 	cl_git_pass(git_vector_insert(&fetchhead_vector, fetchhead[5]));
 | |
| 
 | |
| 	git_fetchhead_write(g_repo, &fetchhead_vector);
 | |
| 
 | |
| 	cl_git_pass(git_futils_readbuffer(&fetchhead_buf,
 | |
| 		"./test1/.git/FETCH_HEAD"));
 | |
| 
 | |
| 	equals = (strcmp(fetchhead_buf.ptr, FETCH_HEAD_WILDCARD_DATA) == 0);
 | |
| 
 | |
| 	for (i=0; i < 6; i++)
 | |
| 		git_fetchhead_ref_free(fetchhead[i]);
 | |
| 
 | |
| 	git_buf_free(&fetchhead_buf);
 | |
| 
 | |
| 	git_vector_free(&fetchhead_vector);
 | |
| 
 | |
| 	cl_assert(equals);
 | |
| }
 | |
| 
 |