Magic comment processing blows up on files with only a comment line with no newlinw -----------------------------------------------------------------------------------
Key: JRUBY-5922 URL: https://jira.codehaus.org/browse/JRUBY-5922 Project: JRuby Issue Type: Bug Components: Parser, Ruby 1.9.2 Affects Versions: JRuby 1.6.3 Reporter: Charles Oliver Nutter Assignee: Thomas E Enebo Fix For: JRuby 1.6.4 I've fixed this in 6d72809 on jruby-1_6 and 38de906 on master, but it needs tests. The problem was that the magic comment parsing expected to encounter newline before EOF, resulting in it walking off the end of the file and trying to process a null comment. This resulted in an NPE. Here's the full long log of the NPE, along with the short log Rubyists see. {noformat} ~/projects/jruby $ jruby --1.9 -rffi -e 1 LoadError: load error: ffi/enum -- java.lang.NullPointerException: null require at org/jruby/RubyKernel.java:1047 require at /Users/headius/projects/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29 (root) at /Users/headius/projects/jruby/lib/ruby/site_ruby/shared/ffi/ffi.rb:81 require at org/jruby/RubyKernel.java:1047 require at /Users/headius/projects/jruby/lib/ruby/site_ruby/shared/ffi/ffi.rb:29 (root) at /Users/headius/projects/jruby/lib/ruby/site_ruby/shared/ffi.rb:1 ~/projects/jruby $ jruby -d -Xbacktrace.style=raw --1.9 -rffi -e 1 Exception `LoadError' at java/lang/Thread.java:1570 - Win32API only supported on win32 /Users/headius/projects/jruby/lib/ruby/site_ruby/shared/ffi/library.rb:154 warning: shadowing outer local variable - lib java.lang.NullPointerException at org.jruby.lexer.yacc.RubyYaccLexer.parseMagicComment(RubyYaccLexer.java:741) at org.jruby.lexer.yacc.RubyYaccLexer.readComment(RubyYaccLexer.java:808) at org.jruby.lexer.yacc.RubyYaccLexer.yylex(RubyYaccLexer.java:1003) at org.jruby.lexer.yacc.RubyYaccLexer.nextToken(RubyYaccLexer.java:313) at org.jruby.parser.Ruby19Parser.yyparse(Ruby19Parser.java:1416) at org.jruby.parser.Ruby19Parser.yyparse(Ruby19Parser.java:1367) at org.jruby.parser.Ruby19Parser.parse(Ruby19Parser.java:4232) at org.jruby.parser.Parser.parse(Parser.java:112) at org.jruby.parser.Parser.parse(Parser.java:83) at org.jruby.parser.Parser.parse(Parser.java:91) at org.jruby.Ruby.parseFile(Ruby.java:2276) at org.jruby.Ruby.parseFile(Ruby.java:2287) at org.jruby.Ruby.loadFile(Ruby.java:2438) at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:66) at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:755) at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:334) at org.jruby.runtime.load.LoadService.require(LoadService.java:381) at org.jruby.runtime.load.LoadService.lockAndRequire(LoadService.java:306) at org.jruby.RubyKernel.requireCommon(RubyKernel.java:1055) at org.jruby.RubyKernel.require19(RubyKernel.java:1047) at org.jruby.RubyKernel$s$1$0$require19.call(RubyKernel$s$1$0$require19.gen:65535) at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:319) at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:61) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.RescueNode.executeBody(RescueNode.java:216) at org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120) at org.jruby.ast.RescueNode.interpret(RescueNode.java:110) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:179) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_ROOT(ASTInterpreter.java:120) at org.jruby.Ruby.runInterpreter(Ruby.java:702) at org.jruby.Ruby.loadFile(Ruby.java:2443) at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:66) at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:755) at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:334) at org.jruby.runtime.load.LoadService.require(LoadService.java:381) at org.jruby.runtime.load.LoadService.lockAndRequire(LoadService.java:306) at org.jruby.RubyKernel.requireCommon(RubyKernel.java:1055) at org.jruby.RubyKernel.require19(RubyKernel.java:1047) at org.jruby.RubyKernel$s$1$0$require19.call(RubyKernel$s$1$0$require19.gen:65535) at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:319) at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:61) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.RescueNode.executeBody(RescueNode.java:216) at org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120) at org.jruby.ast.RescueNode.interpret(RescueNode.java:110) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:179) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_ROOT(ASTInterpreter.java:120) at org.jruby.Ruby.runInterpreter(Ruby.java:702) at org.jruby.Ruby.loadFile(Ruby.java:2443) at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:66) at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:755) at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:334) at org.jruby.Ruby.init(Ruby.java:1090) at org.jruby.Ruby.newInstance(Ruby.java:182) at org.jruby.Main.internalRun(Main.java:182) at org.jruby.Main.run(Main.java:164) at org.jruby.Main.run(Main.java:148) at org.jruby.Main.main(Main.java:128) Exception `LoadError' at java/lang/Thread.java:1570 - load error: ffi/enum -- java.lang.NullPointerException: null Exception `LoadError' at java/lang/Thread.java:1570 - load error: ffi/enum -- java.lang.NullPointerException: null LoadError: load error: ffi/enum -- java.lang.NullPointerException: null getStackTrace at java/lang/Thread.java:1570 getBacktraceData at org/jruby/runtime/backtrace/TraceType.java:60 getBacktrace at org/jruby/runtime/backtrace/TraceType.java:26 prepareBacktrace at org/jruby/RubyException.java:160 preRaise at org/jruby/exceptions/RaiseException.java:205 preRaise at org/jruby/exceptions/RaiseException.java:195 <init> at org/jruby/exceptions/RaiseException.java:112 newRaiseException at org/jruby/Ruby.java:3315 newLoadError at org/jruby/Ruby.java:3206 newLoadErrorFromThrowable at org/jruby/runtime/load/LoadService.java:777 tryLoadingLibraryOrScript at org/jruby/runtime/load/LoadService.java:770 smartLoad at org/jruby/runtime/load/LoadService.java:334 require at org/jruby/runtime/load/LoadService.java:381 lockAndRequire at org/jruby/runtime/load/LoadService.java:306 requireCommon at org/jruby/RubyKernel.java:1055 require19 at org/jruby/RubyKernel.java:1047 call at org/jruby/RubyKernel$s$1$0$require19.gen:65535 call at org/jruby/internal/runtime/methods/JavaMethod.java:319 call at org/jruby/internal/runtime/methods/AliasMethod.java:61 call at org/jruby/runtime/callsite/CachingCallSite.java:167 interpret at org/jruby/ast/FCallOneArgNode.java:36 interpret at org/jruby/ast/NewlineNode.java:104 executeBody at org/jruby/ast/RescueNode.java:216 interpretWithJavaExceptions at org/jruby/ast/RescueNode.java:120 interpret at org/jruby/ast/RescueNode.java:110 INTERPRET_METHOD at org/jruby/evaluator/ASTInterpreter.java:75 call at org/jruby/internal/runtime/methods/InterpretedMethod.java:190 call at org/jruby/internal/runtime/methods/DefaultMethod.java:179 cacheAndCall at org/jruby/runtime/callsite/CachingCallSite.java:312 call at org/jruby/runtime/callsite/CachingCallSite.java:169 interpret at org/jruby/ast/FCallOneArgNode.java:36 interpret at org/jruby/ast/NewlineNode.java:104 interpret at org/jruby/ast/BlockNode.java:71 interpret at org/jruby/ast/RootNode.java:129 INTERPRET_ROOT at org/jruby/evaluator/ASTInterpreter.java:120 runInterpreter at org/jruby/Ruby.java:702 loadFile at org/jruby/Ruby.java:2443 load at org/jruby/runtime/load/ExternalScript.java:66 tryLoadingLibraryOrScript at org/jruby/runtime/load/LoadService.java:755 smartLoad at org/jruby/runtime/load/LoadService.java:334 require at org/jruby/runtime/load/LoadService.java:381 lockAndRequire at org/jruby/runtime/load/LoadService.java:306 requireCommon at org/jruby/RubyKernel.java:1055 require19 at org/jruby/RubyKernel.java:1047 call at org/jruby/RubyKernel$s$1$0$require19.gen:65535 call at org/jruby/internal/runtime/methods/JavaMethod.java:319 call at org/jruby/internal/runtime/methods/AliasMethod.java:61 call at org/jruby/runtime/callsite/CachingCallSite.java:167 interpret at org/jruby/ast/FCallOneArgNode.java:36 interpret at org/jruby/ast/NewlineNode.java:104 executeBody at org/jruby/ast/RescueNode.java:216 interpretWithJavaExceptions at org/jruby/ast/RescueNode.java:120 interpret at org/jruby/ast/RescueNode.java:110 INTERPRET_METHOD at org/jruby/evaluator/ASTInterpreter.java:75 call at org/jruby/internal/runtime/methods/InterpretedMethod.java:190 call at org/jruby/internal/runtime/methods/DefaultMethod.java:179 cacheAndCall at org/jruby/runtime/callsite/CachingCallSite.java:312 call at org/jruby/runtime/callsite/CachingCallSite.java:169 interpret at org/jruby/ast/FCallOneArgNode.java:36 interpret at org/jruby/ast/NewlineNode.java:104 interpret at org/jruby/ast/RootNode.java:129 INTERPRET_ROOT at org/jruby/evaluator/ASTInterpreter.java:120 runInterpreter at org/jruby/Ruby.java:702 loadFile at org/jruby/Ruby.java:2443 load at org/jruby/runtime/load/ExternalScript.java:66 tryLoadingLibraryOrScript at org/jruby/runtime/load/LoadService.java:755 smartLoad at org/jruby/runtime/load/LoadService.java:334 init at org/jruby/Ruby.java:1090 newInstance at org/jruby/Ruby.java:182 internalRun at org/jruby/Main.java:182 run at org/jruby/Main.java:164 run at org/jruby/Main.java:148 main at org/jruby/Main.java:128 {noformat} -- This message is automatically generated by JIRA. 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