mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.0.1662: crash when using a class member twice
Problem: Crash when using a class member twice. (Christian J. Robinson) Solution: Make a copy of the value.
This commit is contained in:
@@ -838,6 +838,23 @@ def Test_class_member()
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
|
||||
# using static class member twice
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
|
||||
class HTML
|
||||
static author: string = 'John Doe'
|
||||
|
||||
static def MacroSubstitute(s: string): string
|
||||
return substitute(s, '{{author}}', author, 'gi')
|
||||
enddef
|
||||
endclass
|
||||
|
||||
assert_equal('some text', HTML.MacroSubstitute('some text'))
|
||||
assert_equal('some text', HTML.MacroSubstitute('some text'))
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
|
||||
# access private member in lambda
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
|
@@ -695,6 +695,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1662,
|
||||
/**/
|
||||
1661,
|
||||
/**/
|
||||
|
@@ -3967,8 +3967,8 @@ exec_instructions(ectx_T *ectx)
|
||||
if (GA_GROW_FAILS(&ectx->ec_stack, 1))
|
||||
goto theend;
|
||||
classmember_T *cm = &iptr->isn_arg.classmember;
|
||||
*STACK_TV_BOT(0) =
|
||||
cm->cm_class->class_members_tv[cm->cm_idx];
|
||||
copy_tv(cm->cm_class->class_members_tv + cm->cm_idx,
|
||||
STACK_TV_BOT(0));
|
||||
++ectx->ec_stack.ga_len;
|
||||
}
|
||||
break;
|
||||
|
Reference in New Issue
Block a user