aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--string.c6
-rw-r--r--test/ruby/test_string.rb6
3 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9fc27dae12..22924769f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Apr 23 09:51:26 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * string.c (rb_str_inspect): NUL should not be represented as
+ "\0" when octal digits may follow.
+
Mon Apr 22 22:54:00 2013 Charlie Somerville <charlie@charliesomerville.com>
* insns.def (opt_mod): Use % operator if both operands are positive for
diff --git a/string.c b/string.c
index 83502a917d..ce9cce03d1 100644
--- a/string.c
+++ b/string.c
@@ -4572,7 +4572,11 @@ rb_str_inspect(VALUE str)
}
}
switch (c) {
- case '\0': cc = '0'; break;
+ case '\0':
+ if (p - n > prev) str_buf_cat(result, prev, p - n - prev);
+ str_buf_cat(result, "\\000", 4);
+ prev = p;
+ continue;
case '\n': cc = 'n'; break;
case '\r': cc = 'r'; break;
case '\t': cc = 't'; break;
diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb
index 4d9f7d95b0..f1ed82a4dd 100644
--- a/test/ruby/test_string.rb
+++ b/test/ruby/test_string.rb
@@ -1985,6 +1985,12 @@ class TestString < Test::Unit::TestCase
assert_instance_of(String, s.to_s)
end
+ def test_inspect_nul
+ s = "\0" + "12"
+ assert_not_equal '"\\012"', eval(s.inspect)
+ assert_equal s, eval(s.inspect)
+ end
+
def test_partition
assert_equal(%w(he l lo), "hello".partition(/l/))
assert_equal(%w(he l lo), "hello".partition("l"))