summaryrefslogtreecommitdiff
path: root/builtin/apply.c
diff options
context:
space:
mode:
authorLibravatar Christian Couder <christian.couder@gmail.com>2016-03-18 13:30:41 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2016-04-01 10:21:19 -0700
commit484e77615872b2a62775a6a2dcb1cad0f529c5d3 (patch)
treee1ea714c0b2c1be68adc4d160816f648ed5fa390 /builtin/apply.c
parentapply: remove unused call to free() in gitdiff_{old,new}name() (diff)
downloadtgif-484e77615872b2a62775a6a2dcb1cad0f529c5d3.tar.xz
builtin/apply: handle parse_binary() failure
In parse_binary() there is: forward = parse_binary_hunk(&buffer, &size, &status, &used); if (!forward && !status) /* there has to be one hunk (forward hunk) */ return error(_("unrecognized binary patch at line %d"), linenr-1); so parse_binary() can return -1, because that's what error() returns. Also parse_binary_hunk() sets "status" to -1 in case of error and parse_binary() does "if (status) return status;". In this case parse_chunk() should not add -1 to the patchsize it computes. It is better for future libification efforts to make it just return -1. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/apply.c')
-rw-r--r--builtin/apply.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/builtin/apply.c b/builtin/apply.c
index 4afc94fdbd..dbdfa9b646 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -1863,6 +1863,11 @@ static struct fragment *parse_binary_hunk(char **buf_p,
return NULL;
}
+/*
+ * Returns:
+ * -1 in case of error,
+ * the length of the parsed binary patch otherwise
+ */
static int parse_binary(char *buffer, unsigned long size, struct patch *patch)
{
/*
@@ -2008,6 +2013,8 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
linenr++;
used = parse_binary(buffer + hd + llen,
size - hd - llen, patch);
+ if (used < 0)
+ return -1;
if (used)
patchsize = used + llen;
else