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