From cf62554e5aeac5e9417cafdd1fe4cfb8c48d08ba Mon Sep 17 00:00:00 2001 From: Sean Dewar Date: Wed, 15 Sep 2021 13:17:07 +0100 Subject: 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. --- test/functional/ex_cmds/source_spec.lua | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'test') 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 -- cgit