summaryrefslogtreecommitdiff
path: root/vm_eval.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-09-14 02:21:37 -0700
committerJeremy Evans <code@jeremyevans.net>2019-09-14 02:21:37 -0700
commit39c37acf86960ae745c4d690fe2d9dd38cd96fba (patch)
tree6cee7aef6e2db784c0698ba490dd23fb18e2a573 /vm_eval.c
parentb78a345bd63ff2b52ea0f84754ab0988748a9bd0 (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.
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c5
1 files 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;