diff options
| author | Clemens Buchacher <drizzd@aon.at> | 2009-05-27 22:13:43 +0200 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2009-05-27 23:16:16 -0700 | 
| commit | 6a01554e6350123c78de805d820e90f1c56e5fdc (patch) | |
| tree | 512631158643b30cda638d18e1ca0ee70a7d3a8e | |
| parent | e57cb0158209ece040a4b873064504efd7d2ec0e (diff) | |
fix segfault showing an empty remote
In case of an empty list, the search for its tail caused a
NULL-pointer dereference.
Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Reported-by: Erik Faye-Lund <kusmabite@googlemail.com>
Acked-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rw-r--r-- | builtin-remote.c | 8 | ||||
| -rwxr-xr-x | t/t5505-remote.sh | 10 | 
2 files changed, 14 insertions, 4 deletions
| diff --git a/builtin-remote.c b/builtin-remote.c index 71abf68404..fda9a54a0c 100644 --- a/builtin-remote.c +++ b/builtin-remote.c @@ -299,11 +299,11 @@ static int get_push_ref_states(const struct ref *remote_refs,  		return 0;  	local_refs = get_local_heads(); -	ref = push_map = copy_ref_list(remote_refs); -	while (ref->next) -		ref = ref->next; -	push_tail = &ref->next; +	push_map = copy_ref_list(remote_refs); +	push_tail = &push_map; +	while (*push_tail) +		push_tail = &((*push_tail)->next);  	match_refs(local_refs, push_map, &push_tail, remote->push_refspec_nr,  		   remote->push_refspec, MATCH_REFS_NONE); diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index 5ec668d6d8..e70246b3fb 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -494,5 +494,15 @@ test_expect_success 'remote prune to cause a dangling symref' '  	grep "dangling symref" err  ' +test_expect_success 'show empty remote' ' + +	test_create_repo empty && +	git clone empty empty-clone && +	( +		cd empty-clone && +		git remote show origin +	) +' +  test_done | 
