トップ «前の日記(2005-01-18 (Tue)) 最新 次の日記(2005-01-21 (Fri))» 編集   RSS 1.0 FEED  

Journal InTime


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の値はまったく使用されないので、汚染が伝搬しない (する必要がない)。

Tags: Ruby