Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullPointerException with newEncodingCompatibilityError in 1.8 mode #368

Closed
MartinKoerner opened this issue Nov 1, 2012 · 2 comments
Closed

Comments

@MartinKoerner
Copy link

Hello,

in our project we are using JRuby in 1.8 mode.
With JRuby 1.7.0 we get the following exception, while trying to concatenate Strings with UTF-8 encodings:

utf8_string = "МОСКВА"
db_string   = GetStringFromDB
puts utf8_string.to_java_bytes           # => byte[-48, -100, -48, -98, -48, -95, -48, -102, -48, -110, -48, -112]@117c419a
puts db_string.to_java_bytes             # => byte[-48, -100, -48, -98, -48, -95, -48, -102, -48, -110, -48, -112]@516368e1 
puts utf8_string + db_string               # => "МОСКВАМОСКВА"
puts "#{utf8_string} + #{db_string}"  # => Exception

We get the following exception:

        Java..JavaLang..NullPointerException

              org.jruby.exceptions.RaiseException(RaiseException.java:101)
              org.jruby.Ruby.newRaiseException(Ruby.java:3546)
              org.jruby.Ruby.newEncodingCompatibilityError(Ruby.java:3521)
              org.jruby.RubyString.cat(RubyString.java:1375)
              org.jruby.RubyString.cat19(RubyString.java:1310)
              org.jruby.RubyString.cat19(RubyString.java:1303)
              org.jruby.RubyString.append19(RubyString.java:2557)
              org.jruby.javasupport.util.RuntimeHelpers.shortcutAppend(RuntimeHelpers.java:2769)
              org.jruby.ast.DNode.appendToString(DNode.java:75)
              org.jruby.ast.DNode.buildDynamicString(DNode.java:88)
              org.jruby.ast.DNode.interpret(DNode.java:40)
              org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.ast.IfNode.interpret(IfNode.java:116)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75)
              org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:139)
              org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:176)
              org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:306)
              org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:136)
              org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:64)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.ast.IfNode.interpret(IfNode.java:116)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.ast.RescueNode.executeBody(RescueNode.java:228)
              org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:123)
              org.jruby.ast.RescueNode.interpret(RescueNode.java:113)
              org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75)
              org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:204)
              org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:200)
              org.jruby.RubyMethod.call(RubyMethod.java:122)
              org.jruby.RubyMethod$INVOKER$i$call.call(RubyMethod$INVOKER$i$call.gen)
              org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrOneOrNBlock.call(JavaMethod.java:274)
              org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:326)
              org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
              org.jruby.ast.CallSpecialArgNode.interpret(CallSpecialArgNode.java:67)
              org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75)
              org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:112)
              org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:126)
              org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:167)
              org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:296)
              org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:72)
              org.jruby.ast.CallManyArgsNode.interpret(CallManyArgsNode.java:59)
              org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.ast.RescueNode.executeBody(RescueNode.java:228)
              org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:123)
              org.jruby.ast.RescueNode.interpret(RescueNode.java:113)
              org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75)
              org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:225)
              org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:208)
              org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:346)
              org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:204)
              org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59)
              org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123)
              org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
              org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
              org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75)
              org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:161)
              org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:184)
              org.jruby.RubyClass.finvoke(RubyClass.java:590)
              org.jruby.RubyBasicObject.send(RubyBasicObject.java:2753)
              org.jruby.RubyKernel.send(RubyKernel.java:2060)
              org.jruby.RubyKernel$INVOKER$s$send.call(RubyKernel$INVOKER$s$send.gen)
              org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:327)
              org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:326)
              org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
              ....

This leads to two questions:

  • DNode#appendToString obviously calls RuntimeHelpers#shortcutAppend instead of shortcutAppend18. But I checked RUBY_VERSION right before the error, it is 1.8.7 and Ruby#is1_9 returns false
  • RubyString#cat throws EncodingCompatibilityError, not caring about 1.8/1.9 mode. But Ruby#getEncodingCompatibilityError returns this.encodingCompatibilityError, which is only defined in 1.9 mode (Ruby#initExceptions)
@MartinKoerner
Copy link
Author

This was a duplicate from #366
Actual trunk build is working fine.

@BanzaiMan
Copy link
Member

Very well. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants