0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 9.1.1099: Vim9: import with extends may crash

Problem:  Vim9: import with extends may crash, v9.1.1087 wasn't the
          correct way to fix it)
Solution: When using an import class, Check for a valid class member
          variable at compile time (Yegappan Lakshmanan)

related: #16601
closes: #16603

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yegappan Lakshmanan
2025-02-10 21:35:07 +01:00
committed by Christian Brabandt
parent e3647c8bf5
commit 54d7f18c38
5 changed files with 9 additions and 13 deletions

View File

@@ -96,7 +96,7 @@ clean:
-rm -f opt_test.vim test_result.log $(CLEANUP_FILES) -rm -f opt_test.vim test_result.log $(CLEANUP_FILES)
-rm -rf $(RM_ON_RUN) $(RM_ON_START) -rm -rf $(RM_ON_RUN) $(RM_ON_START)
-rm -f valgrind.* -rm -f valgrind.*
-rm -f asan.* -rm -f asan.* asan_test_*
-rm -f guidialog guidialogfile -rm -f guidialog guidialogfile
# Delete the files produced by benchmarking, so they can run again. # Delete the files produced by benchmarking, so they can run again.

View File

@@ -3454,8 +3454,7 @@ def Test_vim9_import_and_class_extends()
var myView = View.new('This should be ok') var myView = View.new('This should be ok')
assert_equal('This should be ok', myView.content.value) assert_equal('This should be ok', myView.content.value)
END END
# TODO: The root cause will be identified later. v9.CheckScriptFailure(lines, 'E1376: Object variable "value2" accessible only using class "Run" object', 2)
v9.CheckScriptFailure(lines, 'E1099: Unknown error while executing new', 7)
enddef enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1099,
/**/ /**/
1098, 1098,
/**/ /**/

View File

@@ -2496,9 +2496,10 @@ compile_load_lhs(
lhs->lhs_type = cctx->ctx_type_stack.ga_len == 0 ? &t_void lhs->lhs_type = cctx->ctx_type_stack.ga_len == 0 ? &t_void
: get_type_on_stack(cctx, 0); : get_type_on_stack(cctx, 0);
if (lhs->lhs_type->tt_type == VAR_OBJECT) if (lhs->lhs_type->tt_type == VAR_CLASS
|| lhs->lhs_type->tt_type == VAR_OBJECT)
{ {
// Check whether the object variable is modifiable // Check whether the class or object variable is modifiable
if (!lhs_class_member_modifiable(lhs, var_start, cctx)) if (!lhs_class_member_modifiable(lhs, var_start, cctx))
return FAIL; return FAIL;
} }

View File

@@ -2461,15 +2461,9 @@ execute_storeindex(isn_T *iptr, ectx_T *ectx)
otv = class->class_members_tv; otv = class->class_members_tv;
} }
if (otv != NULL)
{
clear_tv(&otv[lidx]); clear_tv(&otv[lidx]);
otv[lidx] = *tv; otv[lidx] = *tv;
} }
else
status = FAIL;
}
else else
{ {
status = FAIL; status = FAIL;