 f36d4f8316
			
		
	
	f36d4f8316
	
	
	
		
			
			Fix a memory leak in codepaths that use the "struct transport_ls_refs_options" API. Since the introduction of the struct in39835409d1(connect, transport: encapsulate arg in struct, 2021-02-05) the caller has been responsible for freeing it. That commit in turn migrated code originally added in402c47d939(clone: send ref-prefixes when using protocol v2, 2018-07-20) andb4be74105f(ls-remote: pass ref prefixes when requesting a remote's refs, 2018-03-15). Only some of those codepaths were releasing the allocated resources of the struct, now all of them will. Mark the "t/t5511-refspec.sh" test as passing when git is compiled with SANITIZE=leak. They'll now be listed as running under the "GIT_TEST_PASSING_SANITIZE_LEAK=true" test mode (the "linux-leaks" CI target). Previously 24/47 tests would fail. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='refspec parsing'
 | |
| 
 | |
| TEST_PASSES_SANITIZE_LEAK=true
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_refspec () {
 | |
| 	kind=$1 refspec=$2 expect=$3
 | |
| 	git config remote.frotz.url "." &&
 | |
| 	git config --remove-section remote.frotz &&
 | |
| 	git config remote.frotz.url "." &&
 | |
| 	git config "remote.frotz.$kind" "$refspec" &&
 | |
| 	if test "$expect" != invalid
 | |
| 	then
 | |
| 		title="$kind $refspec"
 | |
| 		test='git ls-remote frotz'
 | |
| 	else
 | |
| 		title="$kind $refspec (invalid)"
 | |
| 		test='test_must_fail git ls-remote frotz'
 | |
| 	fi
 | |
| 	test_expect_success "$title" "$test"
 | |
| }
 | |
| 
 | |
| test_refspec push ''						invalid
 | |
| test_refspec push ':'
 | |
| test_refspec push '::'						invalid
 | |
| test_refspec push '+:'
 | |
| 
 | |
| test_refspec fetch ''
 | |
| test_refspec fetch ':'
 | |
| test_refspec fetch '::'						invalid
 | |
| 
 | |
| test_refspec push 'refs/heads/*:refs/remotes/frotz/*'
 | |
| test_refspec push 'refs/heads/*:refs/remotes/frotz'		invalid
 | |
| test_refspec push 'refs/heads:refs/remotes/frotz/*'		invalid
 | |
| test_refspec push 'refs/heads/main:refs/remotes/frotz/xyzzy'
 | |
| 
 | |
| 
 | |
| # These have invalid LHS, but we do not have a formal "valid sha-1
 | |
| # expression syntax checker" so they are not checked with the current
 | |
| # code.  They will be caught downstream anyway, but we may want to
 | |
| # have tighter check later...
 | |
| 
 | |
| : test_refspec push 'refs/heads/main::refs/remotes/frotz/xyzzy'	invalid
 | |
| : test_refspec push 'refs/heads/maste :refs/remotes/frotz/xyzzy'	invalid
 | |
| 
 | |
| test_refspec fetch 'refs/heads/*:refs/remotes/frotz/*'
 | |
| test_refspec fetch 'refs/heads/*:refs/remotes/frotz'		invalid
 | |
| test_refspec fetch 'refs/heads:refs/remotes/frotz/*'		invalid
 | |
| test_refspec fetch 'refs/heads/main:refs/remotes/frotz/xyzzy'
 | |
| test_refspec fetch 'refs/heads/main::refs/remotes/frotz/xyzzy'	invalid
 | |
| test_refspec fetch 'refs/heads/maste :refs/remotes/frotz/xyzzy'	invalid
 | |
| 
 | |
| test_refspec push 'main~1:refs/remotes/frotz/backup'
 | |
| test_refspec fetch 'main~1:refs/remotes/frotz/backup'		invalid
 | |
| test_refspec push 'HEAD~4:refs/remotes/frotz/new'
 | |
| test_refspec fetch 'HEAD~4:refs/remotes/frotz/new'		invalid
 | |
| 
 | |
| test_refspec push 'HEAD'
 | |
| test_refspec fetch 'HEAD'
 | |
| test_refspec push '@'
 | |
| test_refspec fetch '@'
 | |
| test_refspec push 'refs/heads/ nitfol'				invalid
 | |
| test_refspec fetch 'refs/heads/ nitfol'				invalid
 | |
| 
 | |
| test_refspec push 'HEAD:'					invalid
 | |
| test_refspec fetch 'HEAD:'
 | |
| test_refspec push 'refs/heads/ nitfol:'				invalid
 | |
| test_refspec fetch 'refs/heads/ nitfol:'			invalid
 | |
| 
 | |
| test_refspec push ':refs/remotes/frotz/deleteme'
 | |
| test_refspec fetch ':refs/remotes/frotz/HEAD-to-me'
 | |
| test_refspec push ':refs/remotes/frotz/delete me'		invalid
 | |
| test_refspec fetch ':refs/remotes/frotz/HEAD to me'		invalid
 | |
| 
 | |
| test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
 | |
| test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*-blah'
 | |
| 
 | |
| test_refspec fetch 'refs/heads*/for-linus:refs/remotes/mine/*'
 | |
| test_refspec push 'refs/heads*/for-linus:refs/remotes/mine/*'
 | |
| 
 | |
| test_refspec fetch 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
 | |
| test_refspec push 'refs/heads/*/*/for-linus:refs/remotes/mine/*' invalid
 | |
| 
 | |
| test_refspec fetch 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
 | |
| test_refspec push 'refs/heads/*g*/for-linus:refs/remotes/mine/*' invalid
 | |
| 
 | |
| test_refspec fetch 'refs/heads/*/for-linus:refs/remotes/mine/*'
 | |
| test_refspec push 'refs/heads/*/for-linus:refs/remotes/mine/*'
 | |
| 
 | |
| good=$(printf '\303\204')
 | |
| test_refspec fetch "refs/heads/${good}"
 | |
| bad=$(printf '\011tab')
 | |
| test_refspec fetch "refs/heads/${bad}"				invalid
 | |
| 
 | |
| test_done
 |