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


Reply via email to