0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 9.1.1765: f_isnan() and f_isinf() do not correctly initialize rettv type

Problem:  f_isnan() and f_isinf() do not correctly initialize rettv type
Solution: Initialize them with type: VAR_NUMBER and value 0 (Damien Lejay).

Both builtins wrote only rettv->vval.v_number and relied on call_func()
initialising rettv->v_type to VAR_NUMBER.  Explicitly set

    rettv->v_type = VAR_NUMBER;
    rettv->vval.v_number = 0;

at function entry to avoid undefined behaviour and make the return type
self-contained.

closes: #18307

Signed-off-by: Damien Lejay <damien@lejay.be>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Damien Lejay
2025-09-15 19:55:25 +00:00
committed by Christian Brabandt
parent 049c76f0e8
commit 19fa46a469
2 changed files with 8 additions and 0 deletions

View File

@@ -345,6 +345,9 @@ f_fmod(typval_T *argvars, typval_T *rettv)
void void
f_isinf(typval_T *argvars, typval_T *rettv) f_isinf(typval_T *argvars, typval_T *rettv)
{ {
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL)
return; return;
@@ -358,6 +361,9 @@ f_isinf(typval_T *argvars, typval_T *rettv)
void void
f_isnan(typval_T *argvars, typval_T *rettv) f_isnan(typval_T *argvars, typval_T *rettv)
{ {
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL)
return; return;

View File

@@ -724,6 +724,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 */
/**/
1765,
/**/ /**/
1764, 1764,
/**/ /**/