2005-01-20 (Thu) [長年日記]
_ 汚染状態の伝搬
分かってると思うけど、
汚染されている文字列や 汚染されている文字列を指しているオブジェクトから to_sとかinspectとかで生成される文字列は汚染される.
[雄也の?日坊主日記(2005-01-19)より引用]
というのは常に成り立つわけじゃないよね。
class Foo def initialize(s) @s = s end end f = Foo.new("abc".taint) s = f.to_s p s #=> "#<Foo:0xb7d5a778>" p s.tainted? #=> false s2 = f.inspect p s2 #=> "#<Foo:0xb7d5a778 @s=\"abc\">" p s2.tainted? #=> true
重要なのは、fが「汚染されている文字列を指している」かどうかではなくて、 to_sやinspectが汚染されている文字列を使うかどうか。 上の例だと、to_sには@sの値はまったく使用されないので、汚染が伝搬しない (する必要がない)。