diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2021-09-15 13:17:07 +0100 |
---|---|---|
committer | Sean Dewar <seandewar@users.noreply.github.com> | 2021-09-15 13:34:59 +0100 |
commit | cf62554e5aeac5e9417cafdd1fe4cfb8c48d08ba (patch) | |
tree | 7ed2995621a61974bea3086bd9a5ac576cbb23cb /test | |
parent | 6436100b6e4baeee8685677ae4319e71580caa3c (diff) | |
download | rneovim-cf62554e5aeac5e9417cafdd1fe4cfb8c48d08ba.tar.gz rneovim-cf62554e5aeac5e9417cafdd1fe4cfb8c48d08ba.tar.bz2 rneovim-cf62554e5aeac5e9417cafdd1fe4cfb8c48d08ba.zip |
backport: fix(:source): copy curbuf lines to memory before sourcing #15111
It's possible for weirdness to happen if curbuf is modified while
sourcing from it via :source (with no arguments). For example:
- Deleting lines from or wiping curbuf can cause internal error E315 to
be thrown from ml_get.
- Changing the curbuf to another buffer while sourcing can cause lines
from the new curbuf to then be sourced instead.
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/ex_cmds/source_spec.lua | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/test/functional/ex_cmds/source_spec.lua b/test/functional/ex_cmds/source_spec.lua index 3cef412bb6..bdf6ae76d1 100644 --- a/test/functional/ex_cmds/source_spec.lua +++ b/test/functional/ex_cmds/source_spec.lua @@ -60,6 +60,15 @@ describe(':source', function() eq('Vim(let):E15: Invalid expression: #{', exc_exec("'<,'>source")) end) + it('does not break if current buffer is modified while sourced', function() + insert [[ + bwipeout! + let a = 123 + ]] + command('source') + eq('123', meths.exec('echo a', true)) + end) + it('multiline heredoc command', function() insert([[ lua << EOF |