david-a-wheeler / railroader

A static analysis security vulnerability scanner for Ruby on Rails applications (OSS fork of Brakeman)
MIT License
47 stars 1 forks source link

Getting ArgumentError after upgrading sexp_processor gem to 4.12.1 #7

Closed jasnow closed 3 years ago

jasnow commented 5 years ago

After upgrading to 4.12.1 version of sexp_processor gem this morning, we are getting this error:

ruby-2.7.0-preview1@ruby2.7-rails6.1/gems/sexp_processor-4.12.1/
lib/sexp.rb:214:in `line': setting s(:args).line nil (ArgumentError)

Sample app (clone and run railroader command):

https://github.com/jasnow/Practice-Git-with-Rails
david-a-wheeler commented 5 years ago

Thanks for the report! Obviously that should not happen...

mensfeld commented 5 years ago

Same here.

ArgumentError: setting s(:args).line nil
  sexp_processor-4.12.1/lib/sexp.rb:214:in `line'
  railroader-4.3.7/lib/ruby_parser/bm_sexp.rb:43:in `deep_clone'
  railroader-4.3.7/lib/ruby_parser/bm_sexp.rb:32:in `block in deep_clone'
  railroader-4.3.7/lib/ruby_parser/bm_sexp.rb:30:in `each'
  railroader-4.3.7/lib/ruby_parser/bm_sexp.rb:30:in `deep_clone'
  railroader-4.3.7/lib/ruby_parser/bm_sexp.rb:32:in `block in deep_clone'
  railroader-4.3.7/lib/ruby_parser/bm_sexp.rb:30:in `each'
  railroader-4.3.7/lib/ruby_parser/bm_sexp.rb:30:in `deep_clone'
  railroader-4.3.7/lib/railroader/processors/alias_processor.rb:50:in `process_safely'
  railroader-4.3.7/lib/railroader/processor.rb:93:in `process_initializer'
  railroader-4.3.7/lib/railroader/scanner.rb:185:in `process_initializer'
  railroader-4.3.7/lib/railroader/scanner.rb:179:in `block in process_initializers'
  railroader-4.3.7/lib/railroader/scanner.rb:302:in `block in track_progress'
  railroader-4.3.7/lib/railroader/scanner.rb:299:in `each'
  railroader-4.3.7/lib/railroader/scanner.rb:299:in `track_progress'
  railroader-4.3.7/lib/railroader/scanner.rb:177:in `process_initializers'
  railroader-4.3.7/lib/railroader/scanner.rb:47:in `process'
  railroader-4.3.7/lib/railroader.rb:354:in `scan'
  railroader-4.3.7/lib/railroader.rb:77:in `run'
  railroader-4.3.7/lib/railroader/commandline.rb:133:in `run_railroader'
  railroader-4.3.7/lib/railroader/commandline.rb:118:in `regular_report'
  railroader-4.3.7/lib/railroader/commandline.rb:142:in `run_report'
  railroader-4.3.7/lib/railroader/commandline.rb:35:in `run'
  railroader-4.3.7/lib/railroader/commandline.rb:20:in `start'
  railroader-4.3.7/bin/railroader:8:in `<top (required)>'
  /lib/ruby/gems/2.6.0/bin/railroader:23:in `load'
  /lib/ruby/gems/2.6.0/bin/railroader:23:in `<top (required)>'
mensfeld commented 5 years ago

temp fix:

gem 'sexp_processor', '4.12.0'
david-a-wheeler commented 5 years ago

Thanks for the reports, that's definitely not good.

The newest version of sexp_processor (4.12.1) caused some incompatible change. I had intended to track this down & fix it today, but other things intervened and I've run out of time.

So I'm going to temporarily prevent the use of sexp_processor version 4.12.1. That will get us back to "working order". I can then fix it later without hurting people's CI chains. I plan to modify gem_common.rb as follows:

-      spec.add_dependency "sexp_processor", "~> 4.7"
+      # 4.12.1 known to cause problems
+      spec.add_dependency "sexp_processor", ["~> 4.7", "!= 4.12.1"]

If anyone has suggestions on how to do the longer-term fix, or ideas on what changed in sexp_processor to cause this, please let me know!

david-a-wheeler commented 5 years ago

The latest version of Railroader on Rubygems is version 4.3.8, and it expressly disables sexp_processor version 4.12.1. That will get everyone's CI working, and gives us more time to put in a permanent fix.

david-a-wheeler commented 5 years ago

I am leaving this issue report open, because I view disabling sexp_processor version 4.12.1 as a temporary fix.

jasnow commented 5 years ago

Based on the following commit, you appear to now need to always pass a line number (an integer) as a parameter to deep_clone (current behavior is to default to nil when no parameter is given).

https://github.com/seattlerb/sexp_processor/commit/ce284487f057203360c41b14d2b25f8c5453fbb9#diff-f80a15afc0188cb4e64912b1f635d333

prabhu commented 4 years ago

I am getting this error with 4.13.0 now. Any chance of fixing this?

/usr/local/share/gems/gems/sexp_processor-4.13.0/lib/sexp.rb:222:in `line': setting s(:args).line nil (ArgumentError)
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/ruby_parser/bm_sexp.rb:43:in `deep_clone'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/ruby_parser/bm_sexp.rb:32:in `block in deep_clone'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/ruby_parser/bm_sexp.rb:30:in `each'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/ruby_parser/bm_sexp.rb:30:in `deep_clone'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/processors/alias_processor.rb:50:in `process_safely'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/processor.rb:93:in `process_initializer'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/scanner.rb:185:in `process_initializer'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/scanner.rb:179:in `block in process_initializers'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/scanner.rb:302:in `block in track_progress'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/scanner.rb:299:in `each'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/scanner.rb:299:in `track_progress'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/scanner.rb:177:in `process_initializers'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/scanner.rb:47:in `process'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader.rb:354:in `scan'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader.rb:77:in `run'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/commandline.rb:133:in `run_railroader'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/commandline.rb:118:in `regular_report'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/commandline.rb:142:in `run_report'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/commandline.rb:35:in `run'
    from /usr/local/share/gems/gems/railroader-4.3.8/lib/railroader/commandline.rb:20:in `start'
    from /usr/local/share/gems/gems/railroader-4.3.8/bin/railroader:8:in `<top (required)>'
    from /usr/local/bin/railroader:23:in `load'
    from /usr/local/bin/railroader:23:in `<main>'
david-a-wheeler commented 4 years ago

I will have to look at it, but the first step is knowing about it. Thank you.

prabhu commented 4 years ago

Any updates on this?

wolfgangw commented 4 years ago

Getting the same error as @prabhu with rails 6 app and sexp_processor 4.13.0.

hugofloss commented 4 years ago

Same here..

Beyarz commented 4 years ago

I am experiencing this issue too.

tibbon commented 4 years ago

Same

pboling commented 3 years ago
$ bundle exec railroader
Loading scanner...
Processing application in /my/birthday/cake
Processing gems...
[Notice] Detected Rails 4 application
Processing configuration...
[Notice] Escaping HTML by default
Parsing files...
Processing initializers...
bundler: failed to load command: railroader (/Users/pboling/.asdf/installs/ruby/2.5.7/bin/railroader)
ArgumentError: setting s(:args).line nil
  /Users/pboling/.asdf/installs/ruby/2.5.7/lib/ruby/gems/2.5.0/gems/sexp_processor-4.15.1/lib/sexp.rb:222:in `line'
  /Users/pboling/.asdf/installs/ruby/2.5.7/lib/ruby/gems/2.5.0/gems/railroader-4.3.8/lib/ruby_parser/bm_sexp.rb:43:in `deep_clone'

Also of note... it says "detected Rails 4 application", when in fact it is a Ruby application (Grape) that uses many of the Rails gems, like ActiveRecord, ActiveSupport, ActionMailer, ActionCable, etc, and it uses them at version 5.2, not 4.x. I was hoping this setup would work with railroader.

jasnow commented 3 years ago

very old issue so closing it.