vim-patch:8.0.0737: crash when X11 selection is very big

Problem:    Crash when X11 selection is very big.
Solution:   Use static items instead of allocating them.  Add callbacks.
            (Ozaki Kiichi)
cdb7e1b7f9
This commit is contained in:
Jan Edmund Lazo 2018-11-19 21:52:38 -05:00
parent a5637597a6
commit e71f43f8e7
2 changed files with 16 additions and 3 deletions

View File

@ -136,14 +136,15 @@ endfunc
" Wait for up to a second for "expr" to become true.
" Return time slept in milliseconds. With the +reltime feature this can be
" more than the actual waiting time. Without +reltime it can also be less.
func WaitFor(expr)
func WaitFor(expr, ...)
let timeout = get(a:000, 0, 1000)
" using reltime() is more accurate, but not always available
if has('reltime')
let start = reltime()
else
let slept = 0
endif
for i in range(100)
for i in range(timeout / 10)
try
if eval(a:expr)
if has('reltime')
@ -158,7 +159,7 @@ func WaitFor(expr)
endif
sleep 10m
endfor
return 1000
return timeout
endfunc
" Wait for up to a given milliseconds.

View File

@ -87,6 +87,18 @@ func Do_test_quotestar_for_x11()
" Check that the *-register of this vim instance is changed as expected.
call WaitFor('@* == "yes"', 3000)
" Handle the large selection over 262040 byte.
let length = 262044
let sample = 'a' . repeat('b', length - 2) . 'c'
let @* = sample
call WaitFor('remote_expr("' . name . '", "len(@*) >= ' . length . '", "", 1)', 3000)
let res = remote_expr(name, "@*", "", 2)
call assert_equal(length, len(res))
" Check length to prevent a large amount of output at assertion failure.
if length == len(res)
call assert_equal(sample, res)
endif
if has('unix') && has('gui') && !has('gui_running')
let @* = ''