comparison src/testdir/test_indent.vim @ 33784:872c07d5befe v9.0.2112

patch 9.0.2112: [security]: overflow in shift_line Commit: https://github.com/vim/vim/commit/6bf131888a3d1de62bbfa8a7ea03c0ddccfd496e Author: Christian Brabandt <cb@256bit.org> Date: Tue Nov 14 22:42:59 2023 +0100 patch 9.0.2112: [security]: overflow in shift_line Problem: [security]: overflow in shift_line Solution: allow a max indent of INT_MAX [security]: overflow in shift_line When shifting lines in operator pending mode and using a very large value, we may overflow the size of integer. Fix this by using a long variable, testing if the result would be larger than INT_MAX and if so, indent by INT_MAX value. Special case: We cannot use long here, since on 32bit architectures (or on Windows?), it typically cannot take larger values than a plain int, so we have to use long long count, decide whether the resulting multiplication of the shiftwidth value * amount is larger than INT_MAX and if so, we will store INT_MAX as possible larges value in the long long count variable. Then we can safely cast it back to int when calling the functions to set the indent (set_indent() or change_indent()). So this should be safe. Add a test that when using a huge value in operator pending mode for shifting, we will shift by INT_MAX closes: #13535 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 16 Nov 2023 22:15:15 +0100
parents dbec60b8c253
children 2e92551b2350
comparison
equal deleted inserted replaced
33783:682386b2c209 33784:872c07d5befe
273 END 273 END
274 call assert_equal(expected, getline(1, '$')) 274 call assert_equal(expected, getline(1, '$'))
275 bwipe! 275 bwipe!
276 endfunc 276 endfunc
277 277
278 " Test for indenting with large amount, causes overflow
279 func Test_indent_overflow_count()
280 new
281 setl sw=8
282 call setline(1, "abc")
283 norm! V2147483647>
284 " indents by INT_MAX
285 call assert_equal(2147483647, indent(1))
286 close!
287 endfunc
288
278 " vim: shiftwidth=2 sts=2 expandtab 289 " vim: shiftwidth=2 sts=2 expandtab