mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.1599: missing line end when skipping a long line with :cgetfile
Problem: Missing line end when skipping a long line with :cgetfile. Solution: Fix off-by-one error. (closes #6870)
This commit is contained in:
@@ -810,7 +810,7 @@ qf_get_next_file_line(qfstate_T *state)
|
||||
// reached.
|
||||
if (fgets((char *)IObuff, IOSIZE, state->fd) == NULL
|
||||
|| (int)STRLEN(IObuff) < IOSIZE - 1
|
||||
|| IObuff[IOSIZE - 1] == '\n')
|
||||
|| IObuff[IOSIZE - 2] == '\n')
|
||||
break;
|
||||
}
|
||||
|
||||
|
@@ -1744,6 +1744,24 @@ func Test_long_lines()
|
||||
call s:long_lines_tests('l')
|
||||
endfunc
|
||||
|
||||
func Test_cgetfile_on_long_lines()
|
||||
" Problematic values if the line is longer than 4096 bytes. Then 1024 bytes
|
||||
" are read at a time.
|
||||
for len in [4078, 4079, 4080, 5102, 5103, 5104, 6126, 6127, 6128, 7150, 7151, 7152]
|
||||
let lines = [
|
||||
\ '/tmp/file1:1:1:aaa',
|
||||
\ '/tmp/file2:1:1:%s',
|
||||
\ '/tmp/file3:1:1:bbb',
|
||||
\ '/tmp/file4:1:1:ccc',
|
||||
\ ]
|
||||
let lines[1] = substitute(lines[1], '%s', repeat('x', len), '')
|
||||
call writefile(lines, 'Xcqetfile.txt')
|
||||
cgetfile Xcqetfile.txt
|
||||
call assert_equal(4, getqflist(#{size: v:true}).size, 'with length ' .. len)
|
||||
endfor
|
||||
call delete('Xcqetfile.txt')
|
||||
endfunc
|
||||
|
||||
func s:create_test_file(filename)
|
||||
let l = []
|
||||
for i in range(1, 20)
|
||||
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1599,
|
||||
/**/
|
||||
1598,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user