To: vim_dev@googlegroups.com Subject: Patch 8.2.5006 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.5006 (after 8.2.5003) Problem: Asan warns for undefined behavior. Solution: Cast the shifted value to unsigned. Files: src/eval.c, src/vim9expr.c, src/vim9execute.c *** ../vim-8.2.5005/src/eval.c 2022-05-22 20:16:28.857115519 +0100 --- src/eval.c 2022-05-22 22:02:43.347884734 +0100 *************** *** 3089,3095 **** rettv->vval.v_number = 0; else if (type == EXPR_LSHIFT) rettv->vval.v_number = ! rettv->vval.v_number << var2.vval.v_number; else rettv->vval.v_number = (uvarnumber_T)rettv->vval.v_number >> var2.vval.v_number; --- 3089,3095 ---- rettv->vval.v_number = 0; else if (type == EXPR_LSHIFT) rettv->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; *** ../vim-8.2.5005/src/vim9expr.c 2022-05-22 21:53:21.964260321 +0100 --- src/vim9expr.c 2022-05-22 22:01:12.259945749 +0100 *************** *** 2716,2722 **** 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; else tv1->vval.v_number = (uvarnumber_T)tv1->vval.v_number >> tv2->vval.v_number; --- 2716,2723 ---- if (tv2->vval.v_number > MAX_LSHIFT_BITS) tv1->vval.v_number = 0; else if (type == EXPR_LSHIFT) ! 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; *** ../vim-8.2.5005/src/vim9execute.c 2022-05-22 20:16:28.857115519 +0100 --- src/vim9execute.c 2022-05-22 22:03:26.971858088 +0100 *************** *** 4091,4097 **** case EXPR_LSHIFT: if (arg2 > MAX_LSHIFT_BITS) res = 0; else ! res = arg1 << arg2; break; case EXPR_RSHIFT: if (arg2 > MAX_LSHIFT_BITS) res = 0; --- 4091,4097 ---- case EXPR_LSHIFT: if (arg2 > MAX_LSHIFT_BITS) res = 0; else ! res = (uvarnumber_T)arg1 << arg2; break; case EXPR_RSHIFT: if (arg2 > MAX_LSHIFT_BITS) res = 0; *** ../vim-8.2.5005/src/version.c 2022-05-22 21:53:21.964260321 +0100 --- src/version.c 2022-05-22 22:07:28.891734153 +0100 *************** *** 736,737 **** --- 736,739 ---- { /* Add new patch number below this line */ + /**/ + 5006, /**/ -- hundred-and-one symptoms of being an internet addict: 270. You are subscribed to a mailing list for every piece of software you use. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///