diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2024-01-11 18:46:51 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2024-01-11 18:46:51 +0900 |
commit | 3d3bc029c5b48ddfbb7c5f7b062cb364894c64af (patch) | |
tree | 35c9d93eba801e5c43724f6d606d093e99e2378f /parse.y | |
parent | 0480c073449e5116847c9e975ac794f28daef0ac (diff) |
Reject encodings determined at runtime as source code encodings
The encodings determined at runtime are affected by the runtime
environment, such as the OS and locale, while the file contents are
not.
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -9477,11 +9477,20 @@ parser_encode_length(struct parser_params *p, const char *name, long len) static void parser_set_encode(struct parser_params *p, const char *name) { - int idx = rb_enc_find_index(name); rb_encoding *enc; VALUE excargs[3]; + const char *wrong = 0; + switch (*name) { + case 'e': case 'E': wrong = "external"; break; + case 'i': case 'I': wrong = "internal"; break; + case 'f': case 'F': wrong = "filesystem"; break; + case 'l': case 'L': wrong = "locale"; break; + } + if (wrong && STRCASECMP(name, wrong) == 0) goto unknown; + int idx = rb_enc_find_index(name); if (idx < 0) { + unknown: excargs[1] = rb_sprintf("unknown encoding name: %s", name); error: excargs[0] = rb_eArgError; |