Skip to content

Fatal error scanning invalid Ruby syntax #214

@declanvk

Description

@declanvk

Hello,
I'm running into an issue while using the pry debugger (version 0.10.4) that in turns uses the coderay gem (version 1.1.1) for syntax highlighting. Inputting a: / 1 leads to the pry debugger exiting with the following error:

[1] pry(main)> a: / 1
~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/coderay-1.1.1/lib/coderay/scanners/ruby.rb:434:in `scan_tokens':  (CodeRay::Scanners::Scanner::ScanError)

***ERROR in scanner.rb:315:in `raise_inspect': undefined method `+' for nil:NilClass (after 10 tokens)

tokens:
"a"
:key
":"
:operator
" "
:space
:begin_group
:regexp
"/"
:delimiter

current line: 1  column: 7  pos: 6
matched: nil  state: "Error in CodeRay::Scanners::Ruby#scan_tokens, initial state was: :initial"
bol?: false,  eos?: true


surrounding code:
nil  ~~  ""


***ERROR***

	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/coderay-1.1.1/lib/coderay/scanners/scanner.rb:172:in `tokenize'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/coderay-1.1.1/lib/coderay/tokens_proxy.rb:39:in `tokens'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/indent.rb:273:in `tokenize'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/indent.rb:150:in `block in indent'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/indent.rb:143:in `each'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/indent.rb:143:in `indent'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/repl.rb:105:in `read'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/repl.rb:68:in `block in repl'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/repl.rb:67:in `loop'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/repl.rb:67:in `repl'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/repl.rb:38:in `block in start'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/input_lock.rb:61:in `__with_ownership'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/input_lock.rb:79:in `with_ownership'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/repl.rb:38:in `start'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/repl.rb:15:in `start'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.10.4/lib/pry/pry_class.rb:169:in `start'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-byebug-3.4.2/lib/pry-byebug/pry_ext.rb:11:in `start_with_pry_byebug'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/bundler/gems/rails-552151f36571/railties/lib/rails/commands/console.rb:110:in `start'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/bundler/gems/rails-552151f36571/railties/lib/rails/commands/console.rb:9:in `start'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/bundler/gems/rails-552151f36571/railties/lib/rails/commands/commands_tasks.rb:68:in `console'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/bundler/gems/rails-552151f36571/railties/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
	from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/bundler/gems/rails-552151f36571/railties/lib/rails/commands.rb:17:in `<top (required)>'
	from script/rails:6:in `require'
	from script/rails:6:in `<main>'

Checking to make sure that it wasn't an issue with pry I reproduced the issue with the following script:

require 'coderay'
CodeRay.scan('a: / 1').term

which produced a similar, if truncated, error:

CodeRay::Scanners::Scanner::ScanError: 

***ERROR in scanner.rb:315:in `raise_inspect': undefined method `+' for nil:NilClass (after  tokens)

tokens:


current line: 1  column: 7  pos: 6
matched: nil  state: "Error in CodeRay::Scanners::Ruby#scan_tokens, initial state was: :initial"
bol?: false,  eos?: true


surrounding code:
nil  ~~  ""


***ERROR***

from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/coderay-1.1.1/lib/coderay/scanners/ruby.rb:434:in `scan_tokens'

I can't say that I know very much about this software, so I did not submit a PR with this issue.

Thank you for your time,
Declan Kelly

P.S. maybe some sort of fuzzing would be a cool addition to your testing code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions