Set correct termlen for frozen strings

Frozen strings should have the same termlen as the original string when
copy_encoding is true.
This commit is contained in:
Peter Zhu 2022-01-06 13:35:17 -05:00
Родитель 44368b5f8b
Коммит 5f55b03716
1 изменённых файлов: 3 добавлений и 2 удалений

Просмотреть файл

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