From 93160530c470c58a697b5e292e2c4916a88afd38 Mon Sep 17 00:00:00 2001 From: Damien Lejay Date: Tue, 26 Aug 2025 21:03:31 +0200 Subject: [PATCH] patch 9.1.1692: global_functions are not constant Problem: global_functions are not constant Solution: Place global_functions[] in read-only memory (Damien Lejay). Mark global_functions[] as `static const`. The table is never modified at runtime, so keeping it in writable `.data` has no benefit. Only a local pointer in func_check_arg_types() needed adjusting to `const`. No functional changes. closes: #18121 Signed-off-by: Damien Lejay Signed-off-by: Christian Brabandt --- src/evalfunc.c | 4 ++-- src/testdir/test_function_lists.vim | 4 ++-- src/version.c | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/evalfunc.c b/src/evalfunc.c index 13f1823d3b..3a0e9a77af 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -1934,7 +1934,7 @@ typedef struct # define TERM_FUNC(name) NULL #endif -static funcentry_T global_functions[] = +static const funcentry_T global_functions[] = { {"abs", 1, 1, FEARG_1, arg1_float_or_nr, ret_any, f_abs}, @@ -3360,7 +3360,7 @@ internal_func_check_arg_types( return FAIL; } - argcheck_T *argchecks = global_functions[idx].f_argcheck; + const argcheck_T *argchecks = global_functions[idx].f_argcheck; if (argchecks == NULL) return OK; diff --git a/src/testdir/test_function_lists.vim b/src/testdir/test_function_lists.vim index dd69b83260..bd79f7717f 100644 --- a/src/testdir/test_function_lists.vim +++ b/src/testdir/test_function_lists.vim @@ -17,7 +17,7 @@ func Test_function_lists() " Create a file of the functions in evalfunc.c:global_functions[]. enew! read ../evalfunc.c - 1,/^static funcentry_T global_functions\[\] =$/d + 1,/^static const funcentry_T global_functions\[\] =$/d call search('^};$') .,$d v/^ {/d @@ -38,7 +38,7 @@ func Test_function_lists() " not obsolete, sorted in ASCII order. enew! read ../evalfunc.c - 1,/^static funcentry_T global_functions\[\] =$/d + 1,/^static const funcentry_T global_functions\[\] =$/d call search('^};$') .,$d v/^ {/d diff --git a/src/version.c b/src/version.c index db3a4b7ac3..ec3bcc5dec 100644 --- a/src/version.c +++ b/src/version.c @@ -724,6 +724,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1692, /**/ 1691, /**/ -- 2.47.3