Sebastian Staudt created JRUBY-6651:
---------------------------------------
Summary: java.lang.NegativeArraySizeException when loading a
marshalled RuntimeException raised via RSpec
Key: JRUBY-6651
URL: https://jira.codehaus.org/browse/JRUBY-6651
Project: JRuby
Issue Type: Bug
Components: Standard Library
Affects Versions: JRuby 1.6.7, JRuby 1.6.6
Environment: JRuby 1.6.7 (1.9 mode) installed via rbenv on MacOS
10.7.3.
Travic CI
Reporter: Sebastian Staudt
Assignee: Thomas E Enebo
For braumeister.org I'm using Marshal.dump/.load via IO.pipe to communicate
between two processes.
When I recently changed the way errors are marshalled this failure occured on
Travis CI: http://travis-ci.org/#!/koraktor/braumeister.org/jobs/1257061.
Works fine on MRI 1.9.2, 1.9.3 and head.
The offending code:
https://github.com/koraktor/braumeister.org/blob/master/app/models/repository.rb#L287
The offending spec:
https://github.com/koraktor/braumeister.org/blob/master/spec/models/repository_spec.rb#L208-212
Here's the full backtrace:
{code}
Java::JavaLang::NegativeArraySizeException:
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalString(UnmarshalStream.java:307)
# org.jruby.RubyString.unmarshalFrom(RubyString.java:7141)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObjectDirectly(UnmarshalStream.java:203)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:140)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:129)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObjectDirectly(UnmarshalStream.java:188)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:140)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:129)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:102)
# org.jruby.RubyArray.unmarshalFrom(RubyArray.java:4075)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObjectDirectly(UnmarshalStream.java:218)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:140)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:129)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:102)
#
org.jruby.runtime.marshal.UnmarshalStream.defaultVariablesUnmarshal(UnmarshalStream.java:404)
# org.jruby.RubyException$2.unmarshalFrom(RubyException.java:116)
# org.jruby.RubyClass.unmarshal(RubyClass.java:1097)
#
org.jruby.runtime.marshal.UnmarshalStream.defaultObjectUnmarshal(UnmarshalStream.java:364)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObjectDirectly(UnmarshalStream.java:257)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:140)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:129)
#
org.jruby.runtime.marshal.UnmarshalStream.unmarshalObject(UnmarshalStream.java:102)
# org.jruby.RubyMarshal.load(RubyMarshal.java:148)
# org.jruby.RubyMarshal$s$0$1$load.call(RubyMarshal$s$0$1$load.gen:65535)
#
org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:211)
#
org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:207)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167)
# org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57)
# org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:212)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:207)
# org.jruby.RubyClass.finvoke(RubyClass.java:592)
# org.jruby.RubyBasicObject.send19(RubyBasicObject.java:1704)
# org.jruby.RubyKernel.send19(RubyKernel.java:2101)
# org.jruby.RubyKernel$s$send19.call(RubyKernel$s$send19.gen:65535)
#
org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrOneOrTwoOrNBlock.call(JavaMethod.java:283)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:203)
# org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:111)
#
org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:212)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:200)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:183)
# org.jruby.runtime.Block.yieldNonArray(Block.java:141)
# org.jruby.RubyBasicObject.yieldUnder(RubyBasicObject.java:1818)
# org.jruby.RubyBasicObject.specificEval(RubyBasicObject.java:1842)
# org.jruby.RubyBasicObject.instance_eval19(RubyBasicObject.java:1730)
#
org.jruby.RubyBasicObject$i$instance_eval19.call(RubyBasicObject$i$instance_eval19.gen:65535)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:302)
#
org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:144)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:148)
#
org.jruby.ast.CallNoArgBlockPassNode.interpret(CallNoArgBlockPassNode.java:53)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
# org.jruby.ast.RescueNode.executeBody(RescueNode.java:216)
# org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120)
# org.jruby.ast.RescueNode.interpret(RescueNode.java:110)
# org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
# org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:111)
#
org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:212)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:163)
#
org.jruby.runtime.Interpreted19Block.yieldSpecific(Interpreted19Block.java:136)
# org.jruby.runtime.Block.yieldSpecific(Block.java:99)
# org.jruby.ast.ZYieldNode.interpret(ZYieldNode.java:25)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.IfNode.interpret(IfNode.java:117)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:169)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:191)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:302)
#
org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:144)
#
org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:153)
# org.jruby.ast.FCallNoArgBlockNode.interpret(FCallNoArgBlockNode.java:32)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.IfNode.interpret(IfNode.java:119)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.RescueNode.executeBody(RescueNode.java:216)
# org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120)
# org.jruby.ast.RescueNode.interpret(RescueNode.java:110)
# org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
# org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:233)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:215)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:203)
# org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59)
# org.jruby.ast.DAsgnNode.interpret(DAsgnNode.java:110)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:111)
#
org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:212)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:163)
# org.jruby.runtime.Block.yield(Block.java:130)
# org.jruby.RubyArray.collect(RubyArray.java:2331)
# org.jruby.RubyArray.collect19(RubyArray.java:2339)
#
org.jruby.RubyArray$i$0$0$collect19.call(RubyArray$i$0$0$collect19.gen:65535)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:302)
#
org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:144)
#
org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:153)
# org.jruby.ast.CallNoArgBlockNode.interpret(CallNoArgBlockNode.java:64)
# org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:63)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:199)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169)
# org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36)
# org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
# org.jruby.ast.RescueNode.executeBody(RescueNode.java:216)
# org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120)
# org.jruby.ast.RescueNode.interpret(RescueNode.java:110)
# org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
# org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:199)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169)
# org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:111)
#
org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:212)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:163)
# org.jruby.runtime.Block.yield(Block.java:130)
# org.jruby.RubyArray.collect(RubyArray.java:2331)
# org.jruby.RubyArray.collect19(RubyArray.java:2339)
#
org.jruby.RubyArray$i$0$0$collect19.call(RubyArray$i$0$0$collect19.gen:65535)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:302)
#
org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:144)
#
org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:153)
# org.jruby.ast.CallNoArgBlockNode.interpret(CallNoArgBlockNode.java:64)
# org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:63)
# org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
# org.jruby.ast.RescueNode.executeBody(RescueNode.java:216)
# org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120)
# org.jruby.ast.RescueNode.interpret(RescueNode.java:110)
# org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
# org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:199)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169)
# org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:111)
#
org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:212)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:163)
# org.jruby.runtime.Block.yield(Block.java:130)
# org.jruby.RubyArray.collect(RubyArray.java:2331)
# org.jruby.RubyArray.collect19(RubyArray.java:2339)
#
org.jruby.RubyArray$i$0$0$collect19.call(RubyArray$i$0$0$collect19.gen:65535)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:302)
#
org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:144)
#
org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:153)
# org.jruby.ast.CallNoArgBlockNode.interpret(CallNoArgBlockNode.java:64)
# org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:63)
# org.jruby.ast.IfNode.interpret(IfNode.java:111)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
# org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
# org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:111)
#
org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:212)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:163)
#
org.jruby.runtime.Interpreted19Block.yieldSpecific(Interpreted19Block.java:141)
# org.jruby.runtime.Block.yieldSpecific(Block.java:108)
# org.jruby.ast.YieldOneNode.interpret(YieldOneNode.java:35)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
# org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:255)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:223)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:342)
#
org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:212)
#
org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:221)
# org.jruby.ast.CallTwoArgBlockNode.interpret(CallTwoArgBlockNode.java:62)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:233)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:215)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:203)
# org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.IfNode.interpret(IfNode.java:119)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
# org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
# org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
#
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:276)
#
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:231)
#
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:352)
# org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:237)
# org.jruby.ast.FCallThreeArgNode.interpret(FCallThreeArgNode.java:40)
# org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:63)
# org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36)
# org.jruby.ast.IfNode.interpret(IfNode.java:119)
# org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
#
org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:111)
#
org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:212)
# org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:200)
# org.jruby.runtime.Interpreted19Block.call(Interpreted19Block.java:131)
# org.jruby.runtime.Block.call(Block.java:89)
# org.jruby.RubyProc.call(RubyProc.java:270)
# org.jruby.RubyProc.call(RubyProc.java:224)
# org.jruby.Ruby.tearDown(Ruby.java:2780)
# org.jruby.Ruby.tearDown(Ruby.java:2767)
# org.jruby.Main.internalRun(Main.java:261)
# org.jruby.Main.run(Main.java:224)
# org.jruby.Main.run(Main.java:208)
#
org.jruby.util.ShellLauncher$ScriptThreadProcess.run(ShellLauncher.java:141)
# java.lang.Thread.run(Thread.java:680)
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email