0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 9.0.1605: crash when calling method on super in child constructor

Problem:    Crash when calling method on super in child constructor. (Israel
            Chauca Fuentes)
Solution:   Clear the type list. (Ernie Rael, closes #12489, closes #12471)
This commit is contained in:
Ernie Rael
2023-06-04 18:11:35 +01:00
committed by Bram Moolenaar
parent abc8130d6a
commit 114ec813b3
4 changed files with 29 additions and 3 deletions

View File

@@ -1636,6 +1636,28 @@ def Test_using_base_class()
END END
v9.CheckScriptSuccess(lines) v9.CheckScriptSuccess(lines)
unlet g:result unlet g:result
# Using super, Child invokes Base method which has optional arg. #12471
lines =<< trim END
vim9script
class Base
this.success: bool = false
def Method(arg = 0)
this.success = true
enddef
endclass
class Child extends Base
def new()
super.Method()
enddef
endclass
var obj = Child.new()
assert_equal(true, obj.success)
END
v9.CheckScriptSuccess(lines)
enddef enddef

View File

@@ -5651,8 +5651,8 @@ copy_function(ufunc_T *fp)
// type_T **uf_arg_types; // type_T **uf_arg_types;
// type_T *uf_ret_type; // type_T *uf_ret_type;
ufunc->uf_type_list.ga_len = 0; // make uf_type_list empty
ufunc->uf_type_list.ga_data = NULL; ga_init(&ufunc->uf_type_list);
// TODO: partial_T *uf_partial; // TODO: partial_T *uf_partial;

View File

@@ -695,6 +695,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 */
/**/
1605,
/**/ /**/
1604, 1604,
/**/ /**/

View File

@@ -1025,7 +1025,9 @@ early_ret:
if (*fup == NULL) if (*fup == NULL)
goto cleanup; goto cleanup;
mch_memmove(*fup, gap->ga_data, sizeof(ufunc_T *) * gap->ga_len); if (gap->ga_len != 0)
mch_memmove(*fup, gap->ga_data,
sizeof(ufunc_T *) * gap->ga_len);
vim_free(gap->ga_data); vim_free(gap->ga_data);
if (loop == 1) if (loop == 1)
cl->class_class_function_count_child = gap->ga_len; cl->class_class_function_count_child = gap->ga_len;