From 26269cbd5d7827ecfba3df54e167a11076d6c59f Mon Sep 17 00:00:00 2001 From: nahi Date: Mon, 28 Dec 2009 13:01:28 +0000 Subject: [PATCH] * test/ruby/test_marshal.rb: added tests for taintness/untrustness propagation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++ test/ruby/test_marshal.rb | 64 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5598c3b186..924007ab4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Dec 28 22:00:10 2009 NAKAMURA, Hiroshi + + * test/ruby/test_marshal.rb: added tests for taintness/untrustness + propagation. + Mon Dec 28 18:13:26 2009 Yuki Sonoda (Yugui) * sample/occur2.rb: reimplemented in modern style. [ruby-dev:39927]. diff --git a/test/ruby/test_marshal.rb b/test/ruby/test_marshal.rb index 12d1bff30c..704385897c 100644 --- a/test/ruby/test_marshal.rb +++ b/test/ruby/test_marshal.rb @@ -193,6 +193,70 @@ class TestMarshal < Test::Unit::TestCase assert_equal(true, y.untrusted?) end + def test_taint_and_untrust_each_object + x = Object.new + obj = [[x]] + + # clean object causes crean stream + assert_equal(false, obj.tainted?) + assert_equal(false, obj.untrusted?) + assert_equal(false, obj.first.tainted?) + assert_equal(false, obj.first.untrusted?) + assert_equal(false, obj.first.first.tainted?) + assert_equal(false, obj.first.first.untrusted?) + s = Marshal.dump(obj) + assert_equal(false, s.tainted?) + assert_equal(false, s.untrusted?) + + # tainted/untrusted object causes tainted/untrusted stream + x.taint + x.untrust + assert_equal(false, obj.tainted?) + assert_equal(false, obj.untrusted?) + assert_equal(false, obj.first.tainted?) + assert_equal(false, obj.first.untrusted?) + assert_equal(true, obj.first.first.tainted?) + assert_equal(true, obj.first.first.untrusted?) + t = Marshal.dump(obj) + assert_equal(true, t.tainted?) + assert_equal(true, t.untrusted?) + + # clean stream causes clean objects + assert_equal(false, s.tainted?) + assert_equal(false, s.untrusted?) + y = Marshal.load(s) + assert_equal(false, y.tainted?) + assert_equal(false, y.untrusted?) + assert_equal(false, y.first.tainted?) + assert_equal(false, y.first.untrusted?) + assert_equal(false, y.first.first.tainted?) + assert_equal(false, y.first.first.untrusted?) + + # tainted/untrusted stream causes tainted/untrusted objects + assert_equal(true, t.tainted?) + assert_equal(true, t.untrusted?) + y = Marshal.load(t) + assert_equal(true, y.tainted?) + assert_equal(true, y.untrusted?) + assert_equal(true, y.first.tainted?) + assert_equal(true, y.first.untrusted?) + assert_equal(true, y.first.first.tainted?) + assert_equal(true, y.first.first.untrusted?) + + # same tests by different senario + s.taint + s.untrust + assert_equal(true, s.tainted?) + assert_equal(true, s.untrusted?) + y = Marshal.load(s) + assert_equal(true, y.tainted?) + assert_equal(true, y.untrusted?) + assert_equal(true, y.first.tainted?) + assert_equal(true, y.first.untrusted?) + assert_equal(true, y.first.first.tainted?) + assert_equal(true, y.first.first.untrusted?) + end + def test_symbol [:ruby, :"\u{7d05}\u{7389}"].each do |sym| assert_equal(sym, Marshal.load(Marshal.dump(sym)), '[ruby-core:24788]')