vim-patch:8.1.1345: stuck in sandbox with ":s/../\=Function/gn"

Problem:    Stuck in sandbox with ":s/../\=Function/gn".
Solution:   Don't skip over code to restore sandbox. (Christian Brabandt)
6349e9411f
This commit is contained in:
Jan Edmund Lazo 2019-05-18 12:09:22 -04:00
parent e8beea204b
commit 3574126b89
2 changed files with 12 additions and 6 deletions

View File

@ -3819,7 +3819,6 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
if (!preview || has_second_delim) { if (!preview || has_second_delim) {
if (subflags.do_count) { if (subflags.do_count) {
// prevent accidentally changing the buffer by a function // prevent accidentally changing the buffer by a function
save_ma = curbuf->b_p_ma;
curbuf->b_p_ma = false; curbuf->b_p_ma = false;
sandbox++; sandbox++;
} }
@ -3832,13 +3831,9 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
sub, sub_firstline, false, p_magic, true); sub, sub_firstline, false, p_magic, true);
// If getting the substitute string caused an error, don't do // If getting the substitute string caused an error, don't do
// the replacement. // the replacement.
if (aborting()) {
goto skip;
}
// Don't keep flags set by a recursive call // Don't keep flags set by a recursive call
subflags = subflags_save; subflags = subflags_save;
if (subflags.do_count) { if (aborting() || subflags.do_count) {
curbuf->b_p_ma = save_ma; curbuf->b_p_ma = save_ma;
if (sandbox > 0) { if (sandbox > 0) {
sandbox--; sandbox--;

View File

@ -639,6 +639,17 @@ func Test_nocatch_sub_failure_handling()
call assert_equal(1, error_caught) call assert_equal(1, error_caught)
call assert_equal(['1 aaa', '2 aaa', '3 aaa'], getline(1, 3)) call assert_equal(['1 aaa', '2 aaa', '3 aaa'], getline(1, 3))
" Same, but using "n" flag so that "sandbox" gets set
call setline(1, ['1 aaa', '2 aaa', '3 aaa'])
let error_caught = 0
try
%s/aaa/\=Foo()/gn
catch
let error_caught = 1
endtry
call assert_equal(1, error_caught)
call assert_equal(['1 aaa', '2 aaa', '3 aaa'], getline(1, 3))
bwipe! bwipe!
endfunc endfunc