diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-28 01:32:50 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-10-01 20:28:44 +0900 |
commit | 60d0421ca861944459f52292d65dbf0ece26e38a (patch) | |
tree | ee9cc26547bad6b3d51ada81562b2fbb767a6220 /ruby.c | |
parent | 8e9d696ed01d782ad49f2e7b351802ec244ee1bf (diff) |
Fix the encoding of loaded feature names [Bug #18191]
The feature names loaded from the default load paths should also
be in the file system encoding.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4915
Diffstat (limited to 'ruby.c')
-rw-r--r-- | ruby.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -1693,6 +1693,8 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) char fbuf[MAXPATHLEN]; int i = (int)proc_options(argc, argv, opt, 0); unsigned int dump = opt->dump & dump_exit_bits; + rb_vm_t *vm = GET_VM(); + const long loaded_before_enc = RARRAY_LEN(vm->loaded_features); if (opt->dump & (DUMP_BIT(usage)|DUMP_BIT(help))) { int tty = isatty(1); @@ -1894,7 +1896,6 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) rb_obj_freeze(opt->script_name); if (IF_UTF8_PATH(uenc != lenc, 1)) { long i; - rb_vm_t *vm = GET_VM(); VALUE load_path = vm->load_path; const ID id_initial_load_path_mark = INITIAL_LOAD_PATH_MARK; int modifiable = FALSE; @@ -1921,6 +1922,15 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) rb_ary_replace(vm->load_path_snapshot, load_path); } } + { + VALUE loaded_features = vm->loaded_features; + for (long i = loaded_before_enc; i < RARRAY_LEN(loaded_features); ++i) { + VALUE path = RARRAY_AREF(loaded_features, i); + path = rb_enc_associate(rb_str_dup(path), IF_UTF8_PATH(uenc, lenc)); + RARRAY_ASET(loaded_features, i, path); + } + rb_get_expanded_load_path(); + } if (opt->features.mask & COMPILATION_FEATURES) { VALUE option = rb_hash_new(); |