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.
This commit is contained in:
Peter Zhu 2022-11-14 16:59:43 -05:00
parent 9a6c3355c5
commit 710c1ada84

View File

@ -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