summaryrefslogtreecommitdiff
path: root/lib/drb
diff options
context:
space:
mode:
authorseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-04-11 14:48:50 +0000
committerseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-04-11 14:48:50 +0000
commit3fe82505450e5fd1f7de4fbfc428e47fd0cf5969 (patch)
tree982ec9abe98ec2570b966dbf9426117bcb8041d8 /lib/drb
parent9d7f33e08b59b74b9c19f2d8cfc1ff5077e91697 (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.rb24
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)