diff options
author | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-11 14:48:50 +0000 |
---|---|---|
committer | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-11 14:48:50 +0000 |
commit | 3fe82505450e5fd1f7de4fbfc428e47fd0cf5969 (patch) | |
tree | 982ec9abe98ec2570b966dbf9426117bcb8041d8 /lib/drb | |
parent | 9d7f33e08b59b74b9c19f2d8cfc1ff5077e91697 (diff) |
adhoc patch for [druby-ja:123]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/drb')
-rw-r--r-- | lib/drb/drb.rb | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/lib/drb/drb.rb b/lib/drb/drb.rb index d40b6b3721..d97ed40419 100644 --- a/lib/drb/drb.rb +++ b/lib/drb/drb.rb @@ -575,10 +575,19 @@ module DRb end raise(DRbConnError, 'connection closed') if str.nil? raise(DRbConnError, 'premature marshal format(can\'t read)') if str.size < sz - begin - Marshal::load(str) - rescue NameError, ArgumentError - DRbUnknown.new($!, str) + Thread.exclusive do + begin + save = Thread.current[:drb_untaint] + Thread.current[:drb_untaint] = [] + Marshal::load(str) + rescue NameError, ArgumentError + DRbUnknown.new($!, str) + ensure + Thread.current[:drb_untaint].each do |x| + x.untaint + end + Thread.current[:drb_untaint] = save + end end end @@ -988,8 +997,13 @@ module DRb # created to act as a stub for the remote referenced object. def self._load(s) uri, ref = Marshal.load(s) + if DRb.here?(uri) - return DRb.to_obj(ref) + obj = DRb.to_obj(ref) + if ((! obj.tainted?) && Thread.current[:drb_untaint]) + Thread.current[:drb_untaint].push(obj) + end + return obj end self.new_with(uri, ref) |