зеркало из https://github.com/microsoft/git.git
builtin-apply.c: Skip filenames without enough components
find_name() wrongly returned the whole filename for filenames without enough leading pathname components (e.g., when applying a patch to a top-level file with -p2). Include the -p value used in the error message when no filenames can be found. [jc: squashed a test from Nanako Shiraishi] Signed-off-by: Andreas Gruenbacher <agruen@suse.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
902f235378
Коммит
1586208727
|
@ -404,6 +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 @@ static char *squash_slash(char *name)
|
|||
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 @@ static int find_header(char *line, unsigned long size, int *hdrsize, struct patc
|
|||
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;
|
||||
|
|
|
@ -22,4 +22,9 @@ test_expect_success 'apply git diff with -p2' '
|
|||
git apply -p2 patch.file
|
||||
'
|
||||
|
||||
test_expect_success 'apply with too large -p' '
|
||||
test_must_fail git apply --stat -p3 patch.file 2>err &&
|
||||
grep "removing 3 leading" err
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче