summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hash.c13
-rw-r--r--test/ruby/test_env.rb7
-rw-r--r--version.h2
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"