From 0d6459249d13e247cd0eae28f59ef51b862bce80 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Tue, 14 Jan 2025 17:58:17 -0800 Subject: merge revision(s) 19c39e4cfaa467e69b9848c9c5496d7f50d39c7f: [Backport #20984] [Bug #20984] ENV.inspect should be encoding aware --- hash.c | 13 ++++++------- test/ruby/test_env.rb | 7 +++++++ version.h | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/hash.c b/hash.c index 902a2373b3..79e869b13f 100644 --- a/hash.c +++ b/hash.c @@ -5931,24 +5931,23 @@ env_to_s(VALUE _) static VALUE env_inspect(VALUE _) { - VALUE i; VALUE str = rb_str_buf_new2("{"); + rb_encoding *enc = env_encoding(); ENV_LOCK(); { char **env = GET_ENVIRON(environ); while (*env) { - char *s = strchr(*env, '='); + const char *s = strchr(*env, '='); if (env != environ) { rb_str_buf_cat2(str, ", "); } if (s) { - rb_str_buf_cat2(str, "\""); - rb_str_buf_cat(str, *env, s-*env); - rb_str_buf_cat2(str, "\"=>"); - i = rb_inspect(rb_str_new2(s+1)); - rb_str_buf_append(str, i); + rb_str_buf_append(str, rb_str_inspect(env_enc_str_new(*env, s-*env, enc))); + rb_str_buf_cat2(str, "=>"); + s++; + rb_str_buf_append(str, rb_str_inspect(env_enc_str_new(s, strlen(s), enc))); } env++; } diff --git a/test/ruby/test_env.rb b/test/ruby/test_env.rb index cdadeac148..466d8d9d12 100644 --- a/test/ruby/test_env.rb +++ b/test/ruby/test_env.rb @@ -353,6 +353,13 @@ class TestEnv < Test::Unit::TestCase end end + def test_inspect_encoding + ENV.clear + key = "VAR\u{e5 e1 e2 e4 e3 101 3042}" + ENV[key] = "foo" + assert_equal(%{{"VAR\u{e5 e1 e2 e4 e3 101 3042}"=>"foo"}}, ENV.inspect) + end + def test_to_a ENV.clear ENV["foo"] = "bar" diff --git a/version.h b/version.h index ae4e3edc36..5acde54440 100644 --- a/version.h +++ b/version.h @@ -11,7 +11,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 6 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 119 +#define RUBY_PATCHLEVEL 120 #include "ruby/version.h" #include "ruby/internal/abi.h" -- cgit v1.2.3