mirror of
https://github.com/git/git
synced 2024-08-28 12:09:19 +00:00
builtin/apply: change die_on_unsafe_path() to check_unsafe_path()
To libify `git apply` functionality we have to signal errors to the caller instead of die()ing. To do that in a compatible manner with the rest of the error handling in "builtin/apply.c", die_on_unsafe_path() should return a negative integer instead of calling die(), so while doing that let's change its name to check_unsafe_path(). Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
dbf1b5fb6a
commit
119ab159e6
|
@ -3704,7 +3704,7 @@ static int path_is_beyond_symlink(struct apply_state *state, const char *name_)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void die_on_unsafe_path(struct patch *patch)
|
static int check_unsafe_path(struct patch *patch)
|
||||||
{
|
{
|
||||||
const char *old_name = NULL;
|
const char *old_name = NULL;
|
||||||
const char *new_name = NULL;
|
const char *new_name = NULL;
|
||||||
|
@ -3716,9 +3716,10 @@ static void die_on_unsafe_path(struct patch *patch)
|
||||||
new_name = patch->new_name;
|
new_name = patch->new_name;
|
||||||
|
|
||||||
if (old_name && !verify_path(old_name))
|
if (old_name && !verify_path(old_name))
|
||||||
die(_("invalid path '%s'"), old_name);
|
return error(_("invalid path '%s'"), old_name);
|
||||||
if (new_name && !verify_path(new_name))
|
if (new_name && !verify_path(new_name))
|
||||||
die(_("invalid path '%s'"), new_name);
|
return error(_("invalid path '%s'"), new_name);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3808,8 +3809,8 @@ static int check_patch(struct apply_state *state, struct patch *patch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!state->unsafe_paths)
|
if (!state->unsafe_paths && check_unsafe_path(patch))
|
||||||
die_on_unsafe_path(patch);
|
return -128;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An attempt to read from or delete a path that is beyond a
|
* An attempt to read from or delete a path that is beyond a
|
||||||
|
@ -3837,10 +3838,14 @@ static int check_patch_list(struct apply_state *state, struct patch *patch)
|
||||||
prepare_symlink_changes(state, patch);
|
prepare_symlink_changes(state, patch);
|
||||||
prepare_fn_table(state, patch);
|
prepare_fn_table(state, patch);
|
||||||
while (patch) {
|
while (patch) {
|
||||||
|
int res;
|
||||||
if (state->apply_verbosely)
|
if (state->apply_verbosely)
|
||||||
say_patch_name(stderr,
|
say_patch_name(stderr,
|
||||||
_("Checking patch %s..."), patch);
|
_("Checking patch %s..."), patch);
|
||||||
err |= check_patch(state, patch);
|
res = check_patch(state, patch);
|
||||||
|
if (res == -128)
|
||||||
|
return -128;
|
||||||
|
err |= res;
|
||||||
patch = patch->next;
|
patch = patch->next;
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
@ -4472,11 +4477,16 @@ static int apply_patch(struct apply_state *state,
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((state->check || state->apply) &&
|
if (state->check || state->apply) {
|
||||||
check_patch_list(state, list) < 0 &&
|
int r = check_patch_list(state, list);
|
||||||
!state->apply_with_reject) {
|
if (r == -128) {
|
||||||
res = -1;
|
res = -128;
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
|
if (r < 0 && !state->apply_with_reject) {
|
||||||
|
res = -1;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->apply && write_out_results(state, list)) {
|
if (state->apply && write_out_results(state, list)) {
|
||||||
|
|
Loading…
Reference in a new issue