diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index 75dae44478..f7eae6f825 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -815,6 +815,7 @@ retry: // Copy the read part of the line, excluding null-terminator memcpy(state->growbuf, IObuff, IOSIZE - 1); size_t growbuflen = state->linelen; + state->growbuf[growbuflen] = NUL; while (true) { errno = 0; diff --git a/test/old/testdir/test_perl.vim b/test/old/testdir/test_perl.vim index 2d7f8fdc10..275ec4c483 100644 --- a/test/old/testdir/test_perl.vim +++ b/test/old/testdir/test_perl.vim @@ -156,13 +156,13 @@ func Test_perleval() call assert_equal(0, perleval('0')) call assert_equal(2, perleval('2')) call assert_equal(-2, perleval('-2')) - if has('float') - call assert_equal(2.5, perleval('2.5')) - else - call assert_equal(2, perleval('2.5')) - end + call assert_equal(2.5, perleval('2.5')) - " sandbox call assert_equal(2, perleval('2')) + try + sandbox call perleval('2') + call assert_report('perleval did not fail in the sandbox') + catch /^Vim\%((\S\+)\)\=:E48:/ + endtry call assert_equal('abc', perleval('"abc"')) " call assert_equal("abc\ndef", perleval('"abc\0def"')) diff --git a/test/old/testdir/test_quickfix.vim b/test/old/testdir/test_quickfix.vim index 7470e7d8ff..5c12e8592a 100644 --- a/test/old/testdir/test_quickfix.vim +++ b/test/old/testdir/test_quickfix.vim @@ -7014,4 +7014,18 @@ func Test_quickfixtextfunc_wipes_buffer() bw endfunc +func Test_quickfix_longline_noeol() + let qf = 'Xquickfix' + let args = $"-q {qf}" + let after =<< trim [CODE] + call writefile(['okay'], "XDONE") + qall! + [CODE] + defer delete("XDONE") + call writefile([repeat('A', 1024)], qf, 'bD') + call RunVim([], after, args) + call WaitForAssert({-> assert_true(filereadable("XDONE"))}) + call assert_equal(['okay'], readfile("XDONE")) +endfunc + " vim: shiftwidth=2 sts=2 expandtab