0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.2376: Vim9: crash when dividing by zero in compiled code

Problem:    Vim9: crash when dividing by zero in compiled code using
            constants.
Solution:   Call num_divide() and num_modulus(). (closes #7704)
This commit is contained in:
Bram Moolenaar
2021-01-19 22:16:41 +01:00
parent 09fbedc8dc
commit e64f83cc6a
3 changed files with 8 additions and 2 deletions

View File

@@ -1376,6 +1376,7 @@ def Test_expr6()
assert_equal(1, g:anint / 6) assert_equal(1, g:anint / 6)
assert_equal(2, g:anint assert_equal(2, g:anint
/ g:thefour) / g:thefour)
assert_true(1 / 0 > 99999)
assert_equal(5, 11 % 6) assert_equal(5, 11 % 6)
assert_equal(4, g:anint % 6) assert_equal(4, g:anint % 6)
@@ -1383,6 +1384,7 @@ def Test_expr6()
g:anint) g:anint)
assert_equal(2, g:anint assert_equal(2, g:anint
% g:thefour) % g:thefour)
assert_equal(0, 1 % 0)
assert_equal(4, 6 * 4 / 6) assert_equal(4, 6 * 4 / 6)

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2376,
/**/ /**/
2375, 2375,
/**/ /**/

View File

@@ -4300,9 +4300,11 @@ compile_expr6(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
{ {
case '*': res = tv1->vval.v_number * tv2->vval.v_number; case '*': res = tv1->vval.v_number * tv2->vval.v_number;
break; break;
case '/': res = tv1->vval.v_number / tv2->vval.v_number; case '/': res = num_divide(tv1->vval.v_number,
tv2->vval.v_number);
break; break;
case '%': res = tv1->vval.v_number % tv2->vval.v_number; case '%': res = num_modulus(tv1->vval.v_number,
tv2->vval.v_number);
break; break;
} }
tv1->vval.v_number = res; tv1->vval.v_number = res;