summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2024-01-11 18:46:51 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2024-01-11 18:46:51 +0900
commit3d3bc029c5b48ddfbb7c5f7b062cb364894c64af (patch)
tree35c9d93eba801e5c43724f6d606d093e99e2378f /parse.y
parent0480c073449e5116847c9e975ac794f28daef0ac (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.y11
1 files changed, 10 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index 8eef24ebba..08bd3fb97d 100644
--- a/parse.y
+++ b/parse.y
@@ -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;