diff options
author | Ernie Rael <errael@raelity.com> | 2023-10-07 22:05:40 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-10-07 22:10:26 +0200 |
commit | 9771b2a67f825bdc6e5c615141d22c665952dc86 (patch) | |
tree | 3197766895366d392c92819ddf7e811c5325c317 /src/evalfunc.c | |
parent | 1087b8c29ab521106c5b6cc85d5b38244f0d9c1d (diff) |
patch 9.0.2001: Vim9: segfault with islocked()v9.0.2001
Problem: Vim9: segfault with islocked()
Solution: Check that the lval pointer is not null for objects and
class variables
closes: #13295
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Ernie Rael <errael@raelity.com>
Diffstat (limited to 'src/evalfunc.c')
-rw-r--r-- | src/evalfunc.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 501ee03582..b840220bd0 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -7347,6 +7347,22 @@ f_islocked(typval_T *argvars, typval_T *rettv) || tv_islocked(&di->di_tv)); } } + else if (lv.ll_object != NULL) + { + typval_T *tv = ((typval_T *)(lv.ll_object + 1)) + lv.ll_oi; + rettv->vval.v_number = tv_islocked(tv); +#ifdef LOG_LOCKVAR + ch_log(NULL, "LKVAR: f_islocked(): name %s (obj)", lv.ll_name); +#endif + } + else if (lv.ll_class != NULL) + { + typval_T *tv = &lv.ll_class->class_members_tv[lv.ll_oi]; + rettv->vval.v_number = tv_islocked(tv); +#ifdef LOG_LOCKVAR + ch_log(NULL, "LKVAR: f_islocked(): name %s (cl)", lv.ll_name); +#endif + } else if (lv.ll_range) emsg(_(e_range_not_allowed)); else if (lv.ll_newkey != NULL) |