summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Gruber <luke.gruber@shopify.com>2025-11-12 12:51:47 -0500
committerNobuyoshi Nakada <nobu.nakada@gmail.com>2025-11-18 00:53:47 +0900
commit371a295e190f5b1191400a6ed6944e85ed035598 (patch)
treea75253ad34ed7fd07f8edc82dd40aa7dc86824ea
parent9de66a8c5150266d9f827a11300cd8bcd4b64d4f (diff)
Fix improper termlen fill in `str_duplicate_setup_embed`.
When term len != 1 (for example: Encoding::UTF32BE), term fill is wrong size.
-rw-r--r--string.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/string.c b/string.c
index 5c4e15c4a1..827555d9e0 100644
--- a/string.c
+++ b/string.c
@@ -1935,8 +1935,8 @@ str_duplicate_setup_embed(VALUE klass, VALUE str, VALUE dup)
long len = RSTRING_LEN(str);
RUBY_ASSERT(STR_EMBED_P(dup));
- RUBY_ASSERT(str_embed_capa(dup) >= len + 1);
- MEMCPY(RSTRING(dup)->as.embed.ary, RSTRING(str)->as.embed.ary, char, len + 1);
+ RUBY_ASSERT(str_embed_capa(dup) >= len + TERM_LEN(str));
+ MEMCPY(RSTRING(dup)->as.embed.ary, RSTRING(str)->as.embed.ary, char, len + TERM_LEN(str));
STR_SET_LEN(dup, RSTRING_LEN(str));
return str_duplicate_setup_encoding(str, dup, flags);
}