diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2021-09-15 13:17:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-15 05:17:07 -0700 |
commit | afdc9e61502a9f02c8cf5156652a1bde027e4345 (patch) | |
tree | 72311e75ce51f31422c5abdb75cbf2154faa1094 /test/functional/ex_cmds/source_spec.lua | |
parent | 6188926e00081ae4b1a33d5fd12692a6749a2144 (diff) | |
download | rneovim-afdc9e61502a9f02c8cf5156652a1bde027e4345.tar.gz rneovim-afdc9e61502a9f02c8cf5156652a1bde027e4345.tar.bz2 rneovim-afdc9e61502a9f02c8cf5156652a1bde027e4345.zip |
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/functional/ex_cmds/source_spec.lua')
-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 |