summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-09-23 16:02:44 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-09-23 16:02:44 +0900
commit49af9012a20a824542cf588e55e5488895553e09 (patch)
tree3f1904881dccb4ea00a57b9bc7d9c073123b5f7d /marshal.c
parent7cec727612c7b3a3c05b6d9efa16a6d4557d2f47 (diff)
Prohibit invalid encoding symbols [Bug #18184]
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/marshal.c b/marshal.c
index 744267afaf..26ac51401f 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1479,7 +1479,13 @@ r_symreal(struct load_arg *arg, int ivar)
idx = sym2encidx(sym, r_object(arg));
}
}
- if (idx > 0) rb_enc_associate_index(s, idx);
+ if (idx > 0) {
+ rb_enc_associate_index(s, idx);
+ if (rb_enc_str_coderange(s) == ENC_CODERANGE_BROKEN) {
+ rb_raise(rb_eArgError, "invalid byte sequence in %s: %+"PRIsVALUE,
+ rb_enc_name(rb_enc_from_index(idx)), s);
+ }
+ }
return s;
}