Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Brakeman cannot parse enum with variables #1627

Closed
ktmouk opened this issue Jul 26, 2021 · 1 comment · Fixed by #1631
Closed

Brakeman cannot parse enum with variables #1627

ktmouk opened this issue Jul 26, 2021 · 1 comment · Fixed by #1631

Comments

@ktmouk
Copy link

ktmouk commented Jul 26, 2021

Background

Brakeman version: 5.1.1
Rails version: 6.1.4
Ruby version: 3.0.2

Link to Rails application code: ?

Issue

If I use #{...} to specify the name of the enum, Brakeman raises an exception.
Perhaps model_processor#add_enum_method doesn't seem to support the case of using variables.

Example:

class Example < ApplicationRecord
  foo = 'aaa'
  enum "test_#{foo}": [:bar] # => WrongSexpError
end

Other Error

Run Brakeman with --debug to see the full stack trace.

Stack trace:

$ bundle exec brakeman -d
...
bundler: failed to load command: brakeman (/Users/xxx/.rbenv/versions/3.0.2/bin/brakeman)
/Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/ruby_parser/bm_sexp.rb:54:in `value': Sexp#value called on multi-item Sexp: `s(:dsym, "test_", s(:evstr, s(:lvar, :foo)))` (WrongSexpError)
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processors/model_processor.rb:97:in `add_enum_method'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processors/model_processor.rb:77:in `process_call'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/ruby_parser/bm_sexp_processor.rb:76:in `block in process'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/ruby_parser/bm_sexp_processor.rb:113:in `in_context'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/ruby_parser/bm_sexp_processor.rb:72:in `process'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processors/lib/processor_helper.rb:13:in `block in process_all!'
        from (eval):3:in `map!'
        from (eval):3:in `map!'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processors/lib/processor_helper.rb:11:in `process_all!'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processors/lib/module_helper.rb:54:in `handle_class'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processors/model_processor.rb:35:in `process_class'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/ruby_parser/bm_sexp_processor.rb:76:in `block in process'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/ruby_parser/bm_sexp_processor.rb:113:in `in_context'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/ruby_parser/bm_sexp_processor.rb:72:in `process'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processors/model_processor.rb:21:in `process_model'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/processor.rb:55:in `process_model'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/scanner.rb:331:in `process_model'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/scanner.rb:326:in `block in process_models'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/scanner.rb:340:in `block in track_progress'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/scanner.rb:337:in `each'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/scanner.rb:337:in `track_progress'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/scanner.rb:324:in `process_models'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/scanner.rb:63:in `process'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman.rb:392:in `scan'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman.rb:86:in `run'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/commandline.rb:157:in `run_brakeman'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/commandline.rb:125:in `regular_report'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/commandline.rb:166:in `run_report'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/commandline.rb:35:in `run'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/lib/brakeman/commandline.rb:20:in `start'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/brakeman-5.1.1/bin/brakeman:10:in `<top (required)>'
        from /Users/xxx/.rbenv/versions/3.0.2/bin/brakeman:23:in `load'
        from /Users/xxx/.rbenv/versions/3.0.2/bin/brakeman:23:in `<top (required)>'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `load'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `kernel_load'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/cli/exec.rb:28:in `run'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/cli.rb:474:in `exec'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/cli.rb:30:in `dispatch'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/cli.rb:24:in `start'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/libexec/bundle:49:in `block in <top (required)>'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/3.0.0/bundler/friendly_errors.rb:128:in `with_friendly_errors'
        from /Users/xxx/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/libexec/bundle:37:in `<top (required)>'
        from /Users/xxx/.rbenv/versions/3.0.2/bin/bundle:23:in `load'
        from /Users/xxx/.rbenv/versions/3.0.2/bin/bundle:23:in `<main>'

Regards

@presidentbeef
Copy link
Owner

Thank you for reporting!

presidentbeef added a commit that referenced this issue Sep 18, 2021
Repository owner locked and limited conversation to collaborators Jan 30, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants