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>

Christian Couder committed Aug 8, 2016 at 23:03 UTC 119ab159e65b229feb3851334441ca24aab131ba
1 file changed +21 -11
builtin/apply.c
+21 -11
@@ -3704,7 +3704,7 @@ static int path_is_beyond_symlink(struct apply_state *state, const char *name_)
3704 return ret;
3705 }
3706
3707 -static void die_on_unsafe_path(struct patch *patch)
3707 +static int check_unsafe_path(struct patch *patch)
3708 {
3709 const char *old_name = NULL;
3710 const char *new_name = NULL;
@@ -3716,9 +3716,10 @@ static void die_on_unsafe_path(struct patch *patch)
3716 new_name = patch->new_name;
3717
3718 if (old_name && !verify_path(old_name))
3719 - die(_("invalid path '%s'"), old_name);
3719 + return error(_("invalid path '%s'"), old_name);
3720 if (new_name && !verify_path(new_name))
3721 - die(_("invalid path '%s'"), new_name);
3721 + return error(_("invalid path '%s'"), new_name);
3722 + return 0;
3723 }
3724
3725 /*
@@ -3808,8 +3809,8 @@ static int check_patch(struct apply_state *state, struct patch *patch)
3809 }
3810 }
3811
3811 - if (!state->unsafe_paths)
3812 - die_on_unsafe_path(patch);
3812 + if (!state->unsafe_paths && check_unsafe_path(patch))
3813 + return -128;
3814
3815 /*
3816 * 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)
3838 prepare_symlink_changes(state, patch);
3839 prepare_fn_table(state, patch);
3840 while (patch) {
3841 + int res;
3842 if (state->apply_verbosely)
3843 say_patch_name(stderr,
3844 _("Checking patch %s..."), patch);
3843 - err |= check_patch(state, patch);
3845 + res = check_patch(state, patch);
3846 + if (res == -128)
3847 + return -128;
3848 + err |= res;
3849 patch = patch->next;
3850 }
3851 return err;
@@ -4472,11 +4477,16 @@ static int apply_patch(struct apply_state *state,
4477 goto end;
4478 }
4479
4475 - if ((state->check || state->apply) &&
4476 - check_patch_list(state, list) < 0 &&
4477 - !state->apply_with_reject) {
4478 - res = -1;
4479 - goto end;
4480 + if (state->check || state->apply) {
4481 + int r = check_patch_list(state, list);
4482 + if (r == -128) {
4483 + res = -128;
4484 + goto end;
4485 + }
4486 + if (r < 0 && !state->apply_with_reject) {
4487 + res = -1;
4488 + goto end;
4489 + }
4490 }
4491
4492 if (state->apply && write_out_results(state, list)) {