diff options
author | nagachika <nagachika@ruby-lang.org> | 2020-07-25 12:00:39 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2020-07-25 12:00:39 +0900 |
commit | 89f06ce8b8a887f12b53ea190d79a58e98b59008 (patch) | |
tree | 983a679a9ac164a09e252dab313460e918dfd047 | |
parent | 2e9626fddd168bd12352b4f5dc3412c6a33ce44e (diff) | |
download | ruby-89f06ce8b8a887f12b53ea190d79a58e98b59008.tar.gz |
merge revision(s) 08529a61153e5c40f57a65272211357511d6e6db: [Backport #16798]
Compare environment variable names in those manor [Bug #16798]
-rw-r--r-- | hash.c | 22 | ||||
-rw-r--r-- | test/ruby/test_env.rb | 2 | ||||
-rw-r--r-- | version.h | 2 |
3 files changed, 22 insertions, 4 deletions
@@ -6106,13 +6106,29 @@ env_invert(VALUE _) return rb_hash_invert(env_to_hash()); } +static void +keylist_delete(VALUE keys, VALUE key) +{ + long keylen, elen; + const char *keyptr, *eptr; + RSTRING_GETMEM(key, keyptr, keylen); + for (long i=0; i<RARRAY_LEN(keys); i++) { + VALUE e = RARRAY_AREF(keys, i); + RSTRING_GETMEM(e, eptr, elen); + if (elen != keylen) continue; + if (!ENVNMATCH(keyptr, eptr, elen)) continue; + rb_ary_delete_at(keys, i); + return; + } +} + static int env_replace_i(VALUE key, VALUE val, VALUE keys) { + env_name(key); env_aset(key, val); - if (rb_ary_includes(keys, key)) { - rb_ary_delete(keys, key); - } + + keylist_delete(keys, key); return ST_CONTINUE; } diff --git a/test/ruby/test_env.rb b/test/ruby/test_env.rb index f93cd503d8..02cd3b8502 100644 --- a/test/ruby/test_env.rb +++ b/test/ruby/test_env.rb @@ -433,6 +433,8 @@ class TestEnv < Test::Unit::TestCase ENV["foo"] = "xxx" ENV.replace({"foo"=>"bar", "baz"=>"qux"}) check(ENV.to_hash.to_a, [%w(foo bar), %w(baz qux)]) + ENV.replace({"Foo"=>"Bar", "Baz"=>"Qux"}) + check(ENV.to_hash.to_a, [%w(Foo Bar), %w(Baz Qux)]) end def test_update @@ -2,7 +2,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 1 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 108 +#define RUBY_PATCHLEVEL 109 #define RUBY_RELEASE_YEAR 2020 #define RUBY_RELEASE_MONTH 7 |