diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-09-14 02:21:37 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2019-09-14 02:21:37 -0700 |
commit | 39c37acf86960ae745c4d690fe2d9dd38cd96fba (patch) | |
tree | 6cee7aef6e2db784c0698ba490dd23fb18e2a573 | |
parent | b78a345bd63ff2b52ea0f84754ab0988748a9bd0 (diff) |
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.
-rw-r--r-- | vm_eval.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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; |