Skip to content

Commit

Permalink
patch 9.0.1093: using freed memory of object member
Browse files Browse the repository at this point in the history
Problem:    Using freed memory of object member. (Yegappan Lakshmanan)
Solution:   Make a copy of the object member when getting it.
  • Loading branch information
brammool committed Dec 24, 2022
1 parent e86190e commit 590162c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
26 changes: 26 additions & 0 deletions src/testdir/test_vim9_class.vim
Expand Up @@ -323,6 +323,32 @@ def Test_class_object_member_access()
assert_fails('trip.four = 4', 'E1334')
END
v9.CheckScriptSuccess(lines)

lines =<< trim END
vim9script

class MyCar
this.make: string

def new(make_arg: string)
this.make = make_arg
enddef

def GetMake(): string
return $"make = {this.make}"
enddef
endclass

var c = MyCar.new("abc")
assert_equal('make = abc', c.GetMake())

c = MyCar.new("def")
assert_equal('make = def', c.GetMake())

var c2 = MyCar.new("123")
assert_equal('make = 123', c2.GetMake())
END
v9.CheckScriptSuccess(lines)
enddef

def Test_class_member_access()
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -695,6 +695,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1093,
/**/
1092,
/**/
Expand Down
4 changes: 2 additions & 2 deletions src/vim9execute.c
Expand Up @@ -3799,7 +3799,7 @@ exec_instructions(ectx_T *ectx)
tv->vval.v_number = iptr->isn_arg.storenr.stnr_val;
break;

// store value in list or dict variable
// Store a value in a list, dict, blob or object variable.
case ISN_STOREINDEX:
{
int res = execute_storeindex(iptr, ectx);
Expand Down Expand Up @@ -5159,7 +5159,7 @@ exec_instructions(ectx_T *ectx)
object_T *obj = tv->vval.v_object;
// the members are located right after the object struct
typval_T *mtv = ((typval_T *)(obj + 1)) + idx;
*tv = *mtv;
copy_tv(mtv, tv);

// Unreference the object after getting the member, it may
// be freed.
Expand Down

0 comments on commit 590162c

Please sign in to comment.