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:
parent
9a6c3355c5
commit
710c1ada84
2
string.c
2
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user