From 39c37acf86960ae745c4d690fe2d9dd38cd96fba Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Sat, 14 Sep 2019 02:21:37 -0700 Subject: [PATCH] Fix memory leak when adding empty keyword hashes nagachika pointed out that ALLOC_N is actually just malloc, so this memory wasn't being freed. This shouldn't be a performance sensitive code path, and will be going away after 2.7, so just allocate a temp buffer that will be freed later by Ruby GC. --- vm_eval.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vm_eval.c b/vm_eval.c index f1246537e7..ba57d90946 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -241,8 +241,9 @@ add_empty_keyword(int *argc, const VALUE **argv, int *kw_splat) if (*kw_splat == RB_PASS_CALLED_KEYWORDS || *kw_splat == RB_PASS_EMPTY_KEYWORDS) { if (*kw_splat == RB_PASS_EMPTY_KEYWORDS || rb_empty_keyword_given_p()) { int n = *argc; - VALUE *ptr = ALLOC_N(VALUE,n+1); - + VALUE v; + VALUE *ptr; + ptr = rb_alloc_tmp_buffer2(&v, n, sizeof(VALUE)); memcpy(ptr, *argv, sizeof(VALUE)*n); ptr[n] = rb_hash_new(); *argc = ++n;