From: Junio C Hamano Date: Wed, 13 Apr 2016 21:12:34 +0000 (-0700) Subject: Merge branch 'cc/apply' X-Git-Tag: v2.9.0-rc0~127 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/5b3b015999e4b31259404c5e91c19c08780585a3?ds=inline;hp=-c Merge branch 'cc/apply' Minor code clean-up. * cc/apply: builtin/apply: free patch when parse_chunk() fails builtin/apply: handle parse_binary() failure apply: remove unused call to free() in gitdiff_{old,new}name() builtin/apply: get rid of useless 'name' variable --- 5b3b015999e4b31259404c5e91c19c08780585a3 diff --combined builtin/apply.c index c993333f9f,ce3b77853c..8e4da2e1bd --- a/builtin/apply.c +++ b/builtin/apply.c @@@ -931,22 -931,19 +931,19 @@@ static char *gitdiff_verify_name(const return find_name(line, NULL, p_value, TERM_TAB); if (orig_name) { - int len; - const char *name; + int len = strlen(orig_name); char *another; - name = orig_name; - len = strlen(name); if (isnull) - die(_("git apply: bad git-diff - expected /dev/null, got %s on line %d"), name, linenr); + die(_("git apply: bad git-diff - expected /dev/null, got %s on line %d"), + orig_name, linenr); another = find_name(line, NULL, p_value, TERM_TAB); - if (!another || memcmp(another, name, len + 1)) + if (!another || memcmp(another, orig_name, len + 1)) die((side == DIFF_NEW_NAME) ? _("git apply: bad git-diff - inconsistent new filename on line %d") : _("git apply: bad git-diff - inconsistent old filename on line %d"), linenr); free(another); return orig_name; - } - else { + } else { /* expect "/dev/null" */ if (memcmp("/dev/null", line, 9) || line[9] != '\n') die(_("git apply: bad git-diff - expected /dev/null on line %d"), linenr); @@@ -956,21 -953,15 +953,15 @@@ static int gitdiff_oldname(const char *line, struct patch *patch) { - char *orig = patch->old_name; patch->old_name = gitdiff_verify_name(line, patch->is_new, patch->old_name, DIFF_OLD_NAME); - if (orig != patch->old_name) - free(orig); return 0; } static int gitdiff_newname(const char *line, struct patch *patch) { - char *orig = patch->new_name; patch->new_name = gitdiff_verify_name(line, patch->is_delete, patch->new_name, DIFF_NEW_NAME); - if (orig != patch->new_name) - free(orig); return 0; } @@@ -1872,6 -1863,11 +1863,11 @@@ static struct fragment *parse_binary_hu 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) { /* @@@ -2017,6 -2013,8 +2013,8 @@@ static int parse_chunk(char *buffer, un linenr++; used = parse_binary(buffer + hd + llen, size - hd - llen, patch); + if (used < 0) + return -1; if (used) patchsize = used + llen; else @@@ -4373,8 -4371,10 +4371,10 @@@ static int apply_patch(int fd, const ch patch->inaccurate_eof = !!(options & INACCURATE_EOF); patch->recount = !!(options & RECOUNT); nr = parse_chunk(buf.buf + offset, buf.len - offset, patch); - if (nr < 0) + if (nr < 0) { + free_patch(patch); break; + } if (apply_in_reverse) reverse_patches(patch); if (use_patch(patch)) { @@@ -4383,8 -4383,6 +4383,8 @@@ listp = &patch->next; } else { + if (apply_verbosely) + say_patch_name(stderr, _("Skipped patch '%s'."), patch); free_patch(patch); skipped_patch++; }