diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2023-09-04 22:14:28 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-09-04 22:14:28 +0200 |
commit | 544be0d893e68c494aed09232d5bee4ca8b74619 (patch) | |
tree | 572489199caca04b829c88bc8faf764c8c0a2184 /src/eval.c | |
parent | 623ba31821a41acee7e948794e84867680b97885 (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.c | 13 |
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, |