Mercurial > vim
diff src/evalfunc.c @ 10658:77d66e9ac0ab v8.0.0219
patch 8.0.0219: ubsan reports errors for overflow
commit https://github.com/vim/vim/commit/7a40ea2138102545848ea86a361f1b8dec7552b5
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 22 18:34:57 2017 +0100
patch 8.0.0219: ubsan reports errors for overflow
Problem: Ubsan reports errors for integer overflow.
Solution: Define macros for minimum and maximum values. Select an
expression based on the value. (Mike Williams)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 22 Jan 2017 18:45:04 +0100 |
parents | 27be410d6d29 |
children | 056e32b99e93 |
line wrap: on
line diff
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -3304,21 +3304,12 @@ f_float2nr(typval_T *argvars, typval_T * if (get_float_arg(argvars, &f) == OK) { -# ifdef FEAT_NUM64 - if (f < -0x7fffffffffffffffLL) - rettv->vval.v_number = -0x7fffffffffffffffLL; - else if (f > 0x7fffffffffffffffLL) - rettv->vval.v_number = 0x7fffffffffffffffLL; + if (f < -VARNUM_MAX) + rettv->vval.v_number = -VARNUM_MAX; + else if (f > VARNUM_MAX) + rettv->vval.v_number = VARNUM_MAX; else rettv->vval.v_number = (varnumber_T)f; -# else - if (f < -0x7fffffff) - rettv->vval.v_number = -0x7fffffff; - else if (f > 0x7fffffff) - rettv->vval.v_number = 0x7fffffff; - else - rettv->vval.v_number = (varnumber_T)f; -# endif } }