summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--sprintf.c1
-rw-r--r--test/-ext-/test_printf.rb7
3 files changed, 19 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 3a8b027..719a7d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Wed Aug 15 16:23:35 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (ruby__sfvwrite): set buffer length and exclude
+ uninitialized garbage to get correct coderange.
+
+ * sprintf.c (ruby__sfvextra): the result should be infected by the
+ given strings.
+
+ * sprintf.c (ruby__sfvwrite): set buffer length and exclude
+ uninitialized garbage to get correct coderange.
+
Wed Aug 15 16:20:09 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* common.mk (ID_H_TARGET): make timestamp file of id.h so that the
diff --git a/sprintf.c b/sprintf.c
index b41ab9c..3642e21 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -1174,6 +1174,7 @@ ruby__sfvwrite(register rb_printf_buffer *fp, register struct __suio *uio)
len -= n;
}
fp->_p = (unsigned char *)buf;
+ rb_str_set_len(result, buf - RSTRING_PTR(result));
return 0;
}
diff --git a/test/-ext-/test_printf.rb b/test/-ext-/test_printf.rb
index f801030..fc4e065 100644
--- a/test/-ext-/test_printf.rb
+++ b/test/-ext-/test_printf.rb
@@ -21,4 +21,11 @@ class Test_SPrintf < Test::Unit::TestCase
def test_inspect
assert_equal("{<#{self.class}:#{object_id}>}", Bug::Printf.v(self))
end
+
+ def test_encoding
+ def self.to_s
+ "\u{3042 3044 3046 3048 304a}"
+ end
+ assert_equal("<\u{3042 3044 3046 3048 304a}>", Bug::Printf.s(self))
+ end
end