From 710c1ada8494859a6902c0baf8566d474c34ce32 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 14 Nov 2022 16:59:43 -0500 Subject: Use string's capacity to determine if reembeddable During auto-compaction, using length to determine whether or not a string can be re-embedded may be a problem for newly created strings. This is because usually it requires a malloc before setting the length. If the malloc triggers compaction, then the string may be re-embedded and can cause crashes. --- string.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'string.c') diff --git a/string.c b/string.c index ca2cb4525e..73be76cd72 100644 --- a/string.c +++ b/string.c @@ -258,7 +258,7 @@ rb_str_size_as_embedded(VALUE str) /* if the string is not currently embedded, but it can be embedded, how * much space would it require */ else if (rb_str_reembeddable_p(str)) { - real_size = rb_str_embed_size(RSTRING(str)->as.heap.len) + TERM_LEN(str); + real_size = rb_str_embed_size(RSTRING(str)->as.heap.aux.capa) + TERM_LEN(str); } else { #endif -- cgit v1.2.1