diff --git a/spec/ruby/core/marshal/shared/load.rb b/spec/ruby/core/marshal/shared/load.rb index 98fae4429689..7457e0ffbece 100644 --- a/spec/ruby/core/marshal/shared/load.rb +++ b/spec/ruby/core/marshal/shared/load.rb @@ -8,7 +8,11 @@ it "raises an ArgumentError when the dumped data is truncated" do obj = {first: 1, second: 2, third: 3} - -> { Marshal.send(@method, Marshal.dump(obj)[0, 5]) }.should raise_error(ArgumentError) + -> { Marshal.send(@method, Marshal.dump(obj)[0, 5]) }.should raise_error(ArgumentError, "marshal data too short") + end + + it "raises an ArgumentError when the argument is empty String" do + -> { Marshal.send(@method, "") }.should raise_error(ArgumentError, "marshal data too short") end it "raises an ArgumentError when the dumped class is missing" do diff --git a/src/main/ruby/truffleruby/core/marshal.rb b/src/main/ruby/truffleruby/core/marshal.rb index 79ca238625b8..3e93a63c67fa 100644 --- a/src/main/ruby/truffleruby/core/marshal.rb +++ b/src/main/ruby/truffleruby/core/marshal.rb @@ -505,12 +505,7 @@ def initialize(stream, depth, proc) @stream = nil end - if stream - @consumed = 2 - else - @consumed = 0 - end - + @consumed = 0 @modules = nil @has_ivar = [] @proc = proc @@ -1327,12 +1322,10 @@ def self.dump(obj, an_io=nil, limit=nil) def self.load(obj, prc = nil) if Primitive.object_respond_to? obj, :to_str, false data = obj.to_s - - major = data.getbyte 0 - minor = data.getbyte 1 - ms = StringState.new data, nil, prc + major = ms.consume_byte + minor = ms.consume_byte elsif Primitive.object_respond_to? obj, :read, false and Primitive.object_respond_to? obj, :getc, false ms = IOState.new obj, nil, prc