зеркало из https://github.com/github/ruby.git
Marshal.load: also freeze extended objects
[Bug #19427] The `proc` wouldn't be called either, that fixes both.
This commit is contained in:
Родитель
bc6e587e86
Коммит
7ddcee5928
|
@ -1865,6 +1865,7 @@ r_object_for(struct load_arg *arg, bool partial, int *ivp, VALUE extmod, int typ
|
|||
rb_extend_object(v, m);
|
||||
}
|
||||
}
|
||||
v = r_leave(v, arg, partial);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -69,6 +69,18 @@ describe :marshal_load, shared: true do
|
|||
Object.should_not.frozen?
|
||||
end
|
||||
|
||||
ruby_bug "#19427", ""..."3.3" do
|
||||
it "does freeze extended objects" do
|
||||
object = Marshal.load("\x04\be:\x0FEnumerableo:\vObject\x00", freeze: true)
|
||||
object.should.frozen?
|
||||
end
|
||||
|
||||
it "does freeze extended objects with instance variables" do
|
||||
object = Marshal.load("\x04\be:\x0FEnumerableo:\vObject\x06:\n@ivarT", freeze: true)
|
||||
object.should.frozen?
|
||||
end
|
||||
end
|
||||
|
||||
describe "when called with a proc" do
|
||||
it "call the proc with frozen objects" do
|
||||
arr = []
|
||||
|
@ -132,6 +144,14 @@ describe :marshal_load, shared: true do
|
|||
end
|
||||
end
|
||||
|
||||
ruby_bug "#19427", ""..."3.3" do
|
||||
it "call the proc with extended objects" do
|
||||
objs = []
|
||||
obj = Marshal.load("\x04\be:\x0FEnumerableo:\vObject\x00", Proc.new { |o| objs << o; o })
|
||||
objs.should == [obj]
|
||||
end
|
||||
end
|
||||
|
||||
it "returns the value of the proc" do
|
||||
Marshal.send(@method, Marshal.dump([1,2]), proc { [3,4] }).should == [3,4]
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче