mirror of
https://github.com/neovim/neovim.git
synced 2025-12-10 00:22:41 +00:00
vim-patch:8.2.3601: check for overflow in put count does not work well
Problem: Check for overflow in put count does not work well.
Solution: Improve the overflow check. (Ozaki Kiichi, closes vim/vim#9102)
fa53722367
Add some casts as Nvim uses size_t variables in some places.
We could technically adjust the logic to check for overflow outside of size_t's
range, but it's much easier to just port the patch exactly (also means we can
use the same tests).
v:sizeoflong is N/A, so convert the 64-bit tests to Lua and use the FFI to check
long's size.
This commit is contained in:
45
test/functional/legacy/put_spec.lua
Normal file
45
test/functional/legacy/put_spec.lua
Normal file
@@ -0,0 +1,45 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local clear = helpers.clear
|
||||
local exec_lua = helpers.exec_lua
|
||||
local meths = helpers.meths
|
||||
local source = helpers.source
|
||||
local eq = helpers.eq
|
||||
|
||||
local function sizeoflong()
|
||||
if not exec_lua('return pcall(require, "ffi")') then
|
||||
pending('missing LuaJIT FFI')
|
||||
end
|
||||
return exec_lua('return require("ffi").sizeof(require("ffi").typeof("long"))')
|
||||
end
|
||||
|
||||
describe('put', function()
|
||||
before_each(clear)
|
||||
after_each(function() eq({}, meths.get_vvar('errors')) end)
|
||||
|
||||
it('very large count 64-bit', function()
|
||||
if sizeoflong() < 8 then
|
||||
pending('Skipped: only works with 64 bit long ints')
|
||||
end
|
||||
|
||||
source [[
|
||||
new
|
||||
let @" = 'x'
|
||||
call assert_fails('norm 44444444444444p', 'E1240:')
|
||||
bwipe!
|
||||
]]
|
||||
end)
|
||||
|
||||
it('very large count (visual block) 64-bit', function()
|
||||
if sizeoflong() < 8 then
|
||||
pending('Skipped: only works with 64 bit long ints')
|
||||
end
|
||||
|
||||
source [[
|
||||
new
|
||||
call setline(1, 'x')
|
||||
exe "norm \<C-V>y"
|
||||
call assert_fails('norm 44444444444444p', 'E1240:')
|
||||
bwipe!
|
||||
]]
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user