From: Junio C Hamano Date: Thu, 21 Jan 2010 04:28:50 +0000 (-0800) Subject: Merge branch 'ag/maint-apply-too-large-p' X-Git-Tag: v1.7.0-rc0~54 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/df91d0e4d30ddc9bf2c55e3a63be9cb5318a409a?ds=inline;hp=-c Merge branch 'ag/maint-apply-too-large-p' * ag/maint-apply-too-large-p: builtin-apply.c: Skip filenames without enough components --- df91d0e4d30ddc9bf2c55e3a63be9cb5318a409a diff --combined builtin-apply.c index 541493e1ba,218363fe04..b99db0b800 --- a/builtin-apply.c +++ b/builtin-apply.c @@@ -404,6 -404,9 +404,9 @@@ static char *squash_slash(char *name { int i = 0, j = 0; + if (!name) + return NULL; + while (name[i]) { if ((name[j++] = name[i++]) == '/') while (name[i] == '/') @@@ -416,7 -419,10 +419,10 @@@ static char *find_name(const char *line, char *def, int p_value, int terminate) { int len; - const char *start = line; + const char *start = NULL; + + if (p_value == 0) + start = line; if (*line == '"') { struct strbuf name = STRBUF_INIT; @@@ -1199,7 -1205,8 +1205,8 @@@ static int find_header(char *line, unsi continue; if (!patch->old_name && !patch->new_name) { if (!patch->def_name) - die("git diff header lacks filename information (line %d)", linenr); + die("git diff header lacks filename information when removing " + "%d leading pathname components (line %d)" , p_value, linenr); patch->old_name = patch->new_name = patch->def_name; } patch->is_toplevel_relative = 1; @@@ -2666,7 -2673,7 +2673,7 @@@ static int verify_index_match(struct ca return -1; return 0; } - return ce_match_stat(ce, st, CE_MATCH_IGNORE_VALID); + return ce_match_stat(ce, st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE); } static int check_preimage(struct patch *patch, struct cache_entry **ce, struct stat *st)