aboutsummaryrefslogtreecommitdiffstats
path: root/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'string.c')
-rw-r--r--string.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/string.c b/string.c
index 4ab89a8e2f..4f9fe51f9f 100644
--- a/string.c
+++ b/string.c
@@ -8639,18 +8639,11 @@ str_compat_and_valid(VALUE str, rb_encoding *enc)
if (cr == ENC_CODERANGE_BROKEN) {
rb_raise(rb_eArgError, "replacement must be valid byte sequence '%+"PRIsVALUE"'", str);
}
- else if (cr == ENC_CODERANGE_7BIT) {
- rb_encoding *e = STR_ENC_GET(str);
- if (!rb_enc_asciicompat(enc)) {
- rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s",
- rb_enc_name(enc), rb_enc_name(e));
- }
- }
- else { /* ENC_CODERANGE_VALID */
+ else {
rb_encoding *e = STR_ENC_GET(str);
- if (enc != e) {
+ if (cr == ENC_CODERANGE_7BIT ? rb_enc_mbminlen(enc) != 1 : enc != e) {
rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s",
- rb_enc_name(enc), rb_enc_name(e));
+ rb_enc_name(enc), rb_enc_name(e));
}
}
return str;