Make String#replace to check equality before modifying flags.

ref #3588
parent a7b0ab37
...@@ -520,9 +520,9 @@ str_replace(mrb_state *mrb, struct RString *s1, struct RString *s2) ...@@ -520,9 +520,9 @@ str_replace(mrb_state *mrb, struct RString *s1, struct RString *s2)
long len; long len;
check_frozen(mrb, s1); check_frozen(mrb, s1);
if (s1 == s2) return mrb_obj_value(s1);
s1->flags &= ~MRB_STR_NO_UTF; s1->flags &= ~MRB_STR_NO_UTF;
s1->flags |= s2->flags&MRB_STR_NO_UTF; s1->flags |= s2->flags&MRB_STR_NO_UTF;
if (s1 == s2) return mrb_obj_value(s1);
len = RSTR_LEN(s2); len = RSTR_LEN(s2);
if (RSTR_SHARED_P(s1)) { if (RSTR_SHARED_P(s1)) {
str_decref(mrb, s1->as.heap.aux.shared); str_decref(mrb, s1->as.heap.aux.shared);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment