diff options
author | Peter Zhu <peter@peterzhu.ca> | 2022-01-06 13:35:17 -0500 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2022-01-06 14:33:35 -0500 |
commit | 5f55b03716f0fc8aab227c8a752eefed2a58b38f (patch) | |
tree | 81c5cd250fa770e8b42d292aac0b295ce2e4cc0b /string.c | |
parent | 44368b5f8bc21e19fa06a0fc0625923fc41293e6 (diff) |
Set correct termlen for frozen strings
Frozen strings should have the same termlen as the original string when
copy_encoding is true.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5399
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -1419,9 +1419,10 @@ str_new_frozen_buffer(VALUE klass, VALUE orig, int copy_encoding) VALUE str; long len = RSTRING_LEN(orig); + int termlen = copy_encoding ? TERM_LEN(orig) : 1; - if (STR_EMBED_P(orig) || STR_EMBEDDABLE_P(len, 1)) { - str = str_new(klass, RSTRING_PTR(orig), len); + if (STR_EMBED_P(orig) || STR_EMBEDDABLE_P(len, termlen)) { + str = str_new0(klass, RSTRING_PTR(orig), len, termlen); assert(STR_EMBED_P(str)); } else { |