summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authorLuke Gruber <luke.gru@gmail.com>2019-06-23 15:28:22 -0400
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-06-24 13:34:30 +0900
commit97b4fe2ff6bffe8728952236f2027aa6242f8f40 (patch)
tree41e98f1091526052ccc88acbe5833b8ba1caa090 /array.c
parent7f64a0b4db7ee27a04579236950d88301c7bcabb (diff)
array.c: Wrong heap size given to ruby_sized_xfree when freeing shared roots
Fixes [Bug #15953] Closes: https://github.com/ruby/ruby/pull/2253
Diffstat (limited to 'array.c')
-rw-r--r--array.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/array.c b/array.c
index 403428d361..d441de84e4 100644
--- a/array.c
+++ b/array.c
@@ -44,14 +44,14 @@ VALUE rb_cArray;
#define ARY_HEAP_PTR(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.ptr)
#define ARY_HEAP_LEN(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.len)
-#define ARY_HEAP_CAPA(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.aux.capa)
+#define ARY_HEAP_CAPA(a) (assert(!ARY_EMBED_P(a)), assert(!ARY_SHARED_ROOT_P(a)), RARRAY(a)->as.heap.aux.capa)
#define ARY_EMBED_PTR(a) (assert(ARY_EMBED_P(a)), RARRAY(a)->as.ary)
#define ARY_EMBED_LEN(a) \
(assert(ARY_EMBED_P(a)), \
(long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \
(RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)))
-#define ARY_HEAP_SIZE(a) (assert(!ARY_EMBED_P(a)), assert(ARY_OWNS_HEAP_P(a)), ARY_HEAP_CAPA(a) * sizeof(VALUE))
+#define ARY_HEAP_SIZE(a) (assert(!ARY_EMBED_P(a)), assert(ARY_OWNS_HEAP_P(a)), ARY_CAPA(a) * sizeof(VALUE))
#define ARY_OWNS_HEAP_P(a) (!FL_TEST((a), ELTS_SHARED|RARRAY_EMBED_FLAG))
#define FL_SET_EMBED(a) do { \