summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2023-09-04 22:14:28 +0200
committerChristian Brabandt <cb@256bit.org>2023-09-04 22:14:28 +0200
commit544be0d893e68c494aed09232d5bee4ca8b74619 (patch)
tree572489199caca04b829c88bc8faf764c8c0a2184 /src/eval.c
parent623ba31821a41acee7e948794e84867680b97885 (diff)
patch 9.0.1865: Vim9: garbage collection may cause crashv9.0.1865
Problem: Vim9: garbage collection may cause crash Solution: validate that class members typeval is not null closes: #13028 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/eval.c b/src/eval.c
index 4143dd2ac6..7cfe68cc66 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5725,10 +5725,15 @@ set_ref_in_item_class(
return FALSE;
cl->class_copyID = copyID;
- for (int i = 0; !abort && i < cl->class_class_member_count; ++i)
- abort = abort || set_ref_in_item(
- &cl->class_members_tv[i],
- copyID, ht_stack, list_stack);
+ if (cl->class_members_tv != NULL)
+ {
+ // The "class_members_tv" table is allocated only for regular classes
+ // and not for interfaces.
+ for (int i = 0; !abort && i < cl->class_class_member_count; ++i)
+ abort = abort || set_ref_in_item(
+ &cl->class_members_tv[i],
+ copyID, ht_stack, list_stack);
+ }
for (int i = 0; !abort && i < cl->class_class_function_count; ++i)
abort = abort || set_ref_in_func(NULL,