mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-11-04 08:48:25 +00:00 
			
		
		
		
	tag: don't allow tags to non-existent objects
These indicate an inconsistency in the repository which we've created, so don't allow them. Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
This commit is contained in:
		
							parent
							
								
									81234673a1
								
							
						
					
					
						commit
						7bc66a79fa
					
				@ -209,6 +209,9 @@ static int tag_create(
 | 
			
		||||
		return error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!git_odb_exists(repo->db, target))
 | 
			
		||||
		return GIT_ENOTFOUND;
 | 
			
		||||
 | 
			
		||||
	/* Try to find out what the type is */
 | 
			
		||||
	if (target_type == GIT_OBJ_ANY) {
 | 
			
		||||
		size_t _unused;
 | 
			
		||||
 | 
			
		||||
@ -119,7 +119,7 @@ BEGIN_TEST(write0, "write a tag to the repository and read it again")
 | 
			
		||||
 | 
			
		||||
END_TEST
 | 
			
		||||
 | 
			
		||||
BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid and read it again")
 | 
			
		||||
BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid should fail")
 | 
			
		||||
	git_repository *repo;
 | 
			
		||||
	git_tag *tag;
 | 
			
		||||
	git_oid target_id, tag_id;
 | 
			
		||||
@ -135,7 +135,7 @@ BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid
 | 
			
		||||
	tagger = git_signature_new(TAGGER_NAME, TAGGER_EMAIL, 123456789, 60);
 | 
			
		||||
	must_be_true(tagger != NULL);
 | 
			
		||||
 | 
			
		||||
	must_pass(git_tag_create(
 | 
			
		||||
	must_fail(git_tag_create(
 | 
			
		||||
		&tag_id, /* out id */
 | 
			
		||||
		repo,
 | 
			
		||||
		"the-zombie-tag",
 | 
			
		||||
@ -146,17 +146,6 @@ BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid
 | 
			
		||||
 | 
			
		||||
	git_signature_free((git_signature *)tagger);
 | 
			
		||||
 | 
			
		||||
	must_pass(git_tag_lookup(&tag, repo, &tag_id));
 | 
			
		||||
	
 | 
			
		||||
	/* The non existent target can not be looked up */
 | 
			
		||||
	must_fail(git_tag_target(&zombie, tag));
 | 
			
		||||
 | 
			
		||||
	must_pass(git_reference_lookup(&ref_tag, repo, "refs/tags/the-zombie-tag"));
 | 
			
		||||
	
 | 
			
		||||
	must_pass(git_reference_delete(ref_tag));
 | 
			
		||||
	must_pass(remove_loose_object(REPOSITORY_FOLDER, (git_object *)tag));
 | 
			
		||||
 | 
			
		||||
	git_tag_close(tag);
 | 
			
		||||
	git_repository_free(repo);
 | 
			
		||||
 | 
			
		||||
END_TEST
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user