summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2019-08-17 18:41:26 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-08-19 17:08:03 (GMT)
commitf836bf393731e141a289f6b82d549cf0a10a2bcc (patch)
tree309370b9924685aec3859af613eac812ecf2abbc
parent8e01251694fa277df53e5c52c137f0b4134d2cd5 (diff)
downloadgit-f836bf393731e141a289f6b82d549cf0a10a2bcc.zip
git-f836bf393731e141a289f6b82d549cf0a10a2bcc.tar.gz
git-f836bf393731e141a289f6b82d549cf0a10a2bcc.tar.bz2
merge-recursive: future-proof update_file_flags() against memory leaks
There is a 'free_buf' label to which all but one of the error paths in update_file_flags() jump; that error case involves a NULL buf and is thus not a memory leak. However, make that error case execute the same deallocation code anyway so that if anyone adds any additional memory allocations or deallocations, then all error paths correctly deallocate resources. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--merge-recursive.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/merge-recursive.c b/merge-recursive.c
index 9622781..1d4df95 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -934,9 +934,11 @@ static int update_file_flags(struct merge_options *opt,
}
buf = read_object_file(&contents->oid, &type, &size);
- if (!buf)
- return err(opt, _("cannot read object %s '%s'"),
- oid_to_hex(&contents->oid), path);
+ if (!buf) {
+ ret = err(opt, _("cannot read object %s '%s'"),
+ oid_to_hex(&contents->oid), path);
+ goto free_buf;
+ }
if (type != OBJ_BLOB) {
ret = err(opt, _("blob expected for %s '%s'"),
oid_to_hex(&contents->oid), path);