summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--sprintf.c1
-rw-r--r--test/-ext-/test_printf.rb22
3 files changed, 24 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 719a7d88db..659a89845b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,4 @@
-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.
+Wed Aug 15 16:26:52 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* sprintf.c (ruby__sfvextra): the result should be infected by the
given strings.
diff --git a/sprintf.c b/sprintf.c
index 3642e2153a..7a4f1e5794 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -1210,6 +1210,7 @@ ruby__sfvextra(rb_printf_buffer *fp, size_t valsize, void *valp, long *sz, int s
StringValueCStr(value);
RSTRING_GETMEM(value, cp, *sz);
((rb_printf_buffer_extra *)fp)->value = value;
+ OBJ_INFECT(result, value);
return cp;
}
diff --git a/test/-ext-/test_printf.rb b/test/-ext-/test_printf.rb
index fc4e065345..4c4001654a 100644
--- a/test/-ext-/test_printf.rb
+++ b/test/-ext-/test_printf.rb
@@ -28,4 +28,26 @@ class Test_SPrintf < Test::Unit::TestCase
end
assert_equal("<\u{3042 3044 3046 3048 304a}>", Bug::Printf.s(self))
end
+
+ def test_taint
+ def self.to_s
+ super.taint
+ end
+ assert_equal({to_s: true, inspect: true},
+ {
+ to_s: Bug::Printf.s(self).tainted?,
+ inspect: Bug::Printf.v(self).tainted?,
+ })
+ end
+
+ def test_trust
+ def self.to_s
+ super.untrust
+ end
+ assert_equal({to_s: true, inspect: true},
+ {
+ to_s: Bug::Printf.s(self).untrusted?,
+ inspect: Bug::Printf.v(self).untrusted?,
+ })
+ end
end