From ade2ba57a2659600a5cc2987461538bebeed8f5e Mon Sep 17 00:00:00 2001 From: knu Date: Tue, 23 Apr 2013 00:52:17 +0000 Subject: [PATCH] * string.c (rb_str_inspect): NUL should not be represented as "\0" when octal digits may follow. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40413 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ string.c | 6 +++++- test/ruby/test_string.rb | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) 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 + + * 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 * 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"))