aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2021-09-15 13:17:07 +0100
committerSean Dewar <seandewar@users.noreply.github.com>2021-09-15 13:34:59 +0100
commitcf62554e5aeac5e9417cafdd1fe4cfb8c48d08ba (patch)
tree7ed2995621a61974bea3086bd9a5ac576cbb23cb /test
parent6436100b6e4baeee8685677ae4319e71580caa3c (diff)
downloadrneovim-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.lua9
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