summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2021-10-03 16:16:18 +0900
committernagachika <nagachika@ruby-lang.org>2021-10-03 16:16:18 +0900
commitf192e01233ccd7966721a164e62a86707b4e6d9e (patch)
treeba927a691d1db63f11f2105411ce3a471f1e1e5d /marshal.c
parent5341eca588e738cd5031ab7d8bb5c300471c00e9 (diff)
merge revision(s) 7c0230b05d0978958f89434c84ddd9c82419c1a5,552728a23aeab0df598b356b19a573259e297d14,49af9012a20a824542cf588e55e5488895553e09: [Backport #18184]
Check the entire name as `ruby2_keywords_flag` [Bug #18184] --- marshal.c | 2 +- test/ruby/test_marshal.rb | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) Check the encoding of `ruby2_keywords_flag` [Bug #18184] --- marshal.c | 1 + test/ruby/test_marshal.rb | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) Prohibit invalid encoding symbols [Bug #18184] --- marshal.c | 8 +++++++- test/ruby/test_marshal.rb | 10 +++++++--- 2 files changed, 14 insertions(+), 4 deletions(-)
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/marshal.c b/marshal.c
index d629a11046..5f0ac7e7bb 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1424,9 +1424,10 @@ ruby2_keywords_flag_check(VALUE sym)
{
const char *p;
long l;
+ if (rb_enc_get_index(sym) != ENCINDEX_US_ASCII) return 0;
RSTRING_GETMEM(sym, p, l);
if (l <= 0) return 0;
- if (name_equal(name_s_ruby2_keywords_flag, rb_strlen_lit(name_s_ruby2_keywords_flag), p, 1)) {
+ if (name_equal(name_s_ruby2_keywords_flag, rb_strlen_lit(name_s_ruby2_keywords_flag), p, l)) {
return 1;
}
return 0;
@@ -1461,7 +1462,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;
}