patch 8.2.5006: asan warns for undefined behavior
Problem: Asan warns for undefined behavior.
Solution: Cast the shifted value to unsigned.
diff --git a/src/eval.c b/src/eval.c
index 7f90954..1aa0eae 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3089,7 +3089,7 @@
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;
diff --git a/src/version.c b/src/version.c
index f0ccd20..43390fa 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 5006,
+/**/
5005,
/**/
5004,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 5410aa2..217a977 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -4091,7 +4091,7 @@
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;
diff --git a/src/vim9expr.c b/src/vim9expr.c
index 6fb32cb..a52f2c7 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -2716,7 +2716,8 @@
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;