mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
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:
parent
e8beea204b
commit
3574126b89
@ -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--;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user