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.
This commit is contained in:
Sean Dewar
2021-09-15 13:17:07 +01:00
parent 6436100b6e
commit cf62554e5a
2 changed files with 49 additions and 64 deletions

View File

@@ -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