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 |