]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.5006: asan warns for undefined behavior v8.2.5006
authorBram Moolenaar <Bram@vim.org>
Sun, 22 May 2022 21:07:52 +0000 (22:07 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 22 May 2022 21:07:52 +0000 (22:07 +0100)
Problem:    Asan warns for undefined behavior.
Solution:   Cast the shifted value to unsigned.

src/eval.c
src/version.c
src/vim9execute.c
src/vim9expr.c

index 7f90954667b190284268e7a1c65a64d8094b2a8c..1aa0eaec75d1dfe2c967662a6dd99f3ac77ed4ba 100644 (file)
@@ -3089,7 +3089,7 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
                rettv->vval.v_number = 0;
            else if (type == EXPR_LSHIFT)
                rettv->vval.v_number =
-                                   rettv->vval.v_number << var2.vval.v_number;
+                     (uvarnumber_T)rettv->vval.v_number << var2.vval.v_number;
            else
                rettv->vval.v_number =
                      (uvarnumber_T)rettv->vval.v_number >> var2.vval.v_number;
index f0ccd20860985fa569daa6960693ed0c4b5b9c67..43390faa6d919f16a7ffd06041d703ae57a3c4d5 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    5006,
 /**/
     5005,
 /**/
index 5410aa28411a69e0d8b97e470418f61ddfc3739e..217a97797f8222e98fbc984050fa1a452996b45c 100644 (file)
@@ -4091,7 +4091,7 @@ exec_instructions(ectx_T *ectx)
                        case EXPR_LSHIFT: if (arg2 > MAX_LSHIFT_BITS)
                                              res = 0;
                                          else
-                                             res = arg1 << arg2;
+                                             res = (uvarnumber_T)arg1 << arg2;
                                          break;
                        case EXPR_RSHIFT: if (arg2 > MAX_LSHIFT_BITS)
                                              res = 0;
index 6fb32cb6da870626ad3a50327ee221454cf61e97..a52f2c7e2889cdbebaadabee011323ddcc5c497f 100644 (file)
@@ -2716,7 +2716,8 @@ compile_expr5(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
            if (tv2->vval.v_number > MAX_LSHIFT_BITS)
                tv1->vval.v_number = 0;
            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
                tv1->vval.v_number =
                        (uvarnumber_T)tv1->vval.v_number >> tv2->vval.v_number;