remote: plug memory leak in match_explicit()

The `guess_ref()` returns an allocated buffer of which `make_linked_ref()`
does not take custody (`alloc_ref()` makes a copy), therefore we need to
release the buffer afterwards.

Noticed via Coverity.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin 2017-05-04 15:59:01 +02:00 коммит произвёл Junio C Hamano
Родитель 5026b47175
Коммит 3dc7ea91da
1 изменённых файлов: 3 добавлений и 2 удалений

Просмотреть файл

@ -1191,9 +1191,10 @@ static int match_explicit(struct ref *src, struct ref *dst,
else if (is_null_oid(&matched_src->new_oid)) else if (is_null_oid(&matched_src->new_oid))
error("unable to delete '%s': remote ref does not exist", error("unable to delete '%s': remote ref does not exist",
dst_value); dst_value);
else if ((dst_guess = guess_ref(dst_value, matched_src))) else if ((dst_guess = guess_ref(dst_value, matched_src))) {
matched_dst = make_linked_ref(dst_guess, dst_tail); matched_dst = make_linked_ref(dst_guess, dst_tail);
else free(dst_guess);
} else
error("unable to push to unqualified destination: %s\n" error("unable to push to unqualified destination: %s\n"
"The destination refspec neither matches an " "The destination refspec neither matches an "
"existing ref on the remote nor\n" "existing ref on the remote nor\n"