From e66c99023491107e3d0281af524434f4728e5f74 Mon Sep 17 00:00:00 2001 From: Takeshi Watanabe Date: Wed, 25 Apr 2018 13:27:00 +0900 Subject: Fix array replace leak error in mruby-uri. --- src/array.c | 3 +++ test/t/array.rb | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/array.c b/src/array.c index bfa6e5f06..2152e292d 100644 --- a/src/array.c +++ b/src/array.c @@ -377,6 +377,9 @@ ary_replace(mrb_state *mrb, struct RArray *a, struct RArray *b) if (ARY_EMBED_P(a)) { ARY_UNSET_EMBED_FLAG(a); } + else { + mrb_free(mrb, a->as.heap.ptr); + } a->as.heap.ptr = b->as.heap.ptr; a->as.heap.len = len; a->as.heap.aux.shared = b->as.heap.aux.shared; diff --git a/test/t/array.rb b/test/t/array.rb index d2edd0189..ecec39363 100644 --- a/test/t/array.rb +++ b/test/t/array.rb @@ -392,3 +392,10 @@ assert('Array#freeze') do a[0] = 1 end end + +assert('shared array replace') do + a = [0] * 40 + b = [0, 1, 2] + b.replace a[1, 20].dup + assert_equal 20, b.size +end -- cgit v1.2.3