[前][次][番号順一覧][スレッド一覧]

ruby-changes:62392

From: nagachika <ko1@a...>
Date: Sat, 25 Jul 2020 12:00:55 +0900 (JST)
Subject: [ruby-changes:62392] 89f06ce8b8 (ruby_2_7): merge revision(s) 08529a61153e5c40f57a65272211357511d6e6db: [Backport #16798]

https://git.ruby-lang.org/ruby.git/commit/?id=89f06ce8b8

From 89f06ce8b8a887f12b53ea190d79a58e98b59008 Mon Sep 17 00:00:00 2001
From: nagachika <nagachika@r...>
Date: Sat, 25 Jul 2020 12:00:39 +0900
Subject: merge revision(s) 08529a61153e5c40f57a65272211357511d6e6db: [Backport
 #16798]

	Compare environment variable names in those manor [Bug #16798]

diff --git a/hash.c b/hash.c
index b546f62..dd78d2d 100644
--- a/hash.c
+++ b/hash.c
@@ -6106,13 +6106,29 @@ env_invert(VALUE _) https://github.com/ruby/ruby/blob/trunk/hash.c#L6106
     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 f93cd50..02cd3b8 100644
--- a/test/ruby/test_env.rb
+++ b/test/ruby/test_env.rb
@@ -433,6 +433,8 @@ class TestEnv < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_env.rb#L433
     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
diff --git a/version.h b/version.h
index d3dae72..c0953fe 100644
--- a/version.h
+++ b/version.h
@@ -2,7 +2,7 @@ https://github.com/ruby/ruby/blob/trunk/version.h#L2
 # 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
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]