Fix encoding switches when RUBYOPT is empty or only spaces

* Follow-up of dbbc3583ba432c279f07b1fa0afb0a8a9ba50c91 which broke this.
This commit is contained in:
Benoit Daloze 2023-08-02 17:08:19 +02:00
parent a502cd80a5
commit 3c41a04b6c
2 changed files with 10 additions and 2 deletions

5
ruby.c
View File

@ -895,10 +895,11 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt)
ruby_features_t warn = opt->warn;
int backtrace_length_limit = opt->backtrace_length_limit;
opt->src.enc.name = opt->ext.enc.name = opt->intern.enc.name = 0;
while (ISSPACE(*s)) s++;
if (!*s) return;
opt->src.enc.name = opt->ext.enc.name = opt->intern.enc.name = 0;
argstr = rb_str_tmp_new((len = strlen(s)) + (envopt!=0));
argary = rb_str_tmp_new(0);

View File

@ -6,6 +6,13 @@ describe "ruby -U" do
options: '-U').should == 'UTF-8'
end
it "sets Encoding.default_internal to UTF-8 when RUBYOPT is empty or only spaces" do
ruby_exe('p Encoding.default_internal',
options: '-U', env: { 'RUBYOPT' => '' }).should == "#<Encoding:UTF-8>\n"
ruby_exe('p Encoding.default_internal',
options: '-U', env: { 'RUBYOPT' => ' ' }).should == "#<Encoding:UTF-8>\n"
end
it "does nothing different if specified multiple times" do
ruby_exe('print Encoding.default_internal.name',
options: '-U -U').should == 'UTF-8'