Actions
Bug #18553
closedMemory leak on compiling method call with kwargs
Description
The following code produces a memory leak:
p(foo: 1)
It comes from the allocation in compile.c
:
struct rb_callinfo_kwarg *kw_arg =
rb_xmalloc_mul_add(len, sizeof(VALUE), sizeof(struct rb_callinfo_kwarg));
Later it's packed into struct rb_callinfo
, but imemo_callinfo
is a GC-managed object that has no free
calls in obj_free
function in gc.c.
I've tried to fix it by calling free
on callinfo->kwarg
and it fixed leak in ./miniruby -e 'p(foo: 1)'
, but it breaks make install
. My addition causes a double-free error, looks like either callinfo
or callinfo->kwarg
is shared between multiple objects.
kwarg
field is a const
pointer, so that's somewhat expected (I was under impression that const
qualifier is redundant) :)
I'm pretty sure old versions of Ruby are also affected by this memory leak.
Actions
Like0
Like0Like0Like0Like0Like0