summaryrefslogtreecommitdiffstats
path: root/src/evalfunc.c
diff options
context:
space:
mode:
authorErnie Rael <errael@raelity.com>2023-10-07 22:05:40 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-07 22:10:26 +0200
commit9771b2a67f825bdc6e5c615141d22c665952dc86 (patch)
tree3197766895366d392c92819ddf7e811c5325c317 /src/evalfunc.c
parent1087b8c29ab521106c5b6cc85d5b38244f0d9c1d (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.c16
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)