mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.5006: asan warns for undefined behavior
Problem: Asan warns for undefined behavior. Solution: Cast the shifted value to unsigned.
This commit is contained in:
@@ -3089,7 +3089,7 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
rettv->vval.v_number = 0;
|
rettv->vval.v_number = 0;
|
||||||
else if (type == EXPR_LSHIFT)
|
else if (type == EXPR_LSHIFT)
|
||||||
rettv->vval.v_number =
|
rettv->vval.v_number =
|
||||||
rettv->vval.v_number << var2.vval.v_number;
|
(uvarnumber_T)rettv->vval.v_number << var2.vval.v_number;
|
||||||
else
|
else
|
||||||
rettv->vval.v_number =
|
rettv->vval.v_number =
|
||||||
(uvarnumber_T)rettv->vval.v_number >> var2.vval.v_number;
|
(uvarnumber_T)rettv->vval.v_number >> var2.vval.v_number;
|
||||||
|
@@ -734,6 +734,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 */
|
||||||
|
/**/
|
||||||
|
5006,
|
||||||
/**/
|
/**/
|
||||||
5005,
|
5005,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -4091,7 +4091,7 @@ exec_instructions(ectx_T *ectx)
|
|||||||
case EXPR_LSHIFT: if (arg2 > MAX_LSHIFT_BITS)
|
case EXPR_LSHIFT: if (arg2 > MAX_LSHIFT_BITS)
|
||||||
res = 0;
|
res = 0;
|
||||||
else
|
else
|
||||||
res = arg1 << arg2;
|
res = (uvarnumber_T)arg1 << arg2;
|
||||||
break;
|
break;
|
||||||
case EXPR_RSHIFT: if (arg2 > MAX_LSHIFT_BITS)
|
case EXPR_RSHIFT: if (arg2 > MAX_LSHIFT_BITS)
|
||||||
res = 0;
|
res = 0;
|
||||||
|
@@ -2716,7 +2716,8 @@ compile_expr5(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
|
|||||||
if (tv2->vval.v_number > MAX_LSHIFT_BITS)
|
if (tv2->vval.v_number > MAX_LSHIFT_BITS)
|
||||||
tv1->vval.v_number = 0;
|
tv1->vval.v_number = 0;
|
||||||
else if (type == EXPR_LSHIFT)
|
else if (type == EXPR_LSHIFT)
|
||||||
tv1->vval.v_number = tv1->vval.v_number << tv2->vval.v_number;
|
tv1->vval.v_number =
|
||||||
|
(uvarnumber_T)tv1->vval.v_number << tv2->vval.v_number;
|
||||||
else
|
else
|
||||||
tv1->vval.v_number =
|
tv1->vval.v_number =
|
||||||
(uvarnumber_T)tv1->vval.v_number >> tv2->vval.v_number;
|
(uvarnumber_T)tv1->vval.v_number >> tv2->vval.v_number;
|
||||||
|
Reference in New Issue
Block a user