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