brakeman 1.8.3 → 1.9.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. data/README.md +3 -27
  2. data/lib/brakeman.rb +36 -38
  3. data/lib/brakeman/app_tree.rb +90 -0
  4. data/lib/brakeman/call_index.rb +5 -38
  5. data/lib/brakeman/checks.rb +11 -11
  6. data/lib/brakeman/checks/base_check.rb +53 -29
  7. data/lib/brakeman/checks/check_cross_site_scripting.rb +11 -9
  8. data/lib/brakeman/checks/check_evaluation.rb +1 -1
  9. data/lib/brakeman/checks/check_execute.rb +3 -3
  10. data/lib/brakeman/checks/check_link_to.rb +15 -13
  11. data/lib/brakeman/checks/check_link_to_href.rb +1 -1
  12. data/lib/brakeman/checks/check_mail_to.rb +1 -1
  13. data/lib/brakeman/checks/check_mass_assignment.rb +27 -13
  14. data/lib/brakeman/checks/check_redirect.rb +4 -4
  15. data/lib/brakeman/checks/check_select_tag.rb +1 -1
  16. data/lib/brakeman/checks/check_select_vulnerability.rb +1 -1
  17. data/lib/brakeman/checks/check_send.rb +2 -2
  18. data/lib/brakeman/checks/check_session_settings.rb +12 -5
  19. data/lib/brakeman/checks/check_single_quotes.rb +3 -3
  20. data/lib/brakeman/checks/check_skip_before_filter.rb +4 -3
  21. data/lib/brakeman/checks/check_sql.rb +30 -30
  22. data/lib/brakeman/checks/check_translate_bug.rb +11 -10
  23. data/lib/brakeman/checks/check_validation_regex.rb +36 -11
  24. data/lib/brakeman/checks/check_without_protection.rb +1 -1
  25. data/lib/brakeman/options.rb +6 -2
  26. data/lib/brakeman/processor.rb +6 -5
  27. data/lib/brakeman/processors/alias_processor.rb +153 -38
  28. data/lib/brakeman/processors/base_processor.rb +16 -21
  29. data/lib/brakeman/processors/controller_alias_processor.rb +24 -11
  30. data/lib/brakeman/processors/controller_processor.rb +25 -25
  31. data/lib/brakeman/processors/erb_template_processor.rb +6 -7
  32. data/lib/brakeman/processors/erubis_template_processor.rb +2 -3
  33. data/lib/brakeman/processors/gem_processor.rb +5 -4
  34. data/lib/brakeman/processors/haml_template_processor.rb +4 -6
  35. data/lib/brakeman/processors/lib/find_all_calls.rb +3 -3
  36. data/lib/brakeman/processors/lib/find_call.rb +2 -2
  37. data/lib/brakeman/processors/lib/find_return_value.rb +134 -0
  38. data/lib/brakeman/processors/lib/processor_helper.rb +24 -2
  39. data/lib/brakeman/processors/lib/rails2_config_processor.rb +13 -14
  40. data/lib/brakeman/processors/lib/rails2_route_processor.rb +9 -4
  41. data/lib/brakeman/processors/lib/rails3_config_processor.rb +8 -8
  42. data/lib/brakeman/processors/lib/rails3_route_processor.rb +23 -21
  43. data/lib/brakeman/processors/lib/render_helper.rb +2 -2
  44. data/lib/brakeman/processors/library_processor.rb +2 -2
  45. data/lib/brakeman/processors/model_processor.rb +16 -12
  46. data/lib/brakeman/processors/output_processor.rb +2 -1
  47. data/lib/brakeman/processors/template_alias_processor.rb +12 -8
  48. data/lib/brakeman/report.rb +28 -14
  49. data/lib/brakeman/rescanner.rb +5 -5
  50. data/lib/brakeman/scanner.rb +56 -94
  51. data/lib/brakeman/templates/header.html.erb +7 -2
  52. data/lib/brakeman/tracker.rb +14 -4
  53. data/lib/brakeman/util.rb +38 -17
  54. data/lib/brakeman/version.rb +1 -1
  55. data/lib/brakeman/warning.rb +14 -6
  56. data/lib/ruby_parser/bm_sexp.rb +157 -57
  57. data/lib/ruby_parser/bm_sexp_processor.rb +1 -2
  58. metadata +26 -25
  59. data/lib/ruby_parser/ruby18_parser.rb +0 -5544
  60. data/lib/ruby_parser/ruby19_parser.rb +0 -5756
  61. data/lib/ruby_parser/ruby_lexer.rb +0 -1349
  62. data/lib/ruby_parser/ruby_parser.rb +0 -5
  63. data/lib/ruby_parser/ruby_parser_extras.rb +0 -1057
@@ -6,38 +6,31 @@ class Brakeman::BaseProcessor < Brakeman::SexpProcessor
6
6
  include Brakeman::ProcessorHelper
7
7
  include Brakeman::Util
8
8
 
9
- attr_reader :ignore
9
+ IGNORE = Sexp.new :ignore
10
10
 
11
11
  #Return a new Processor.
12
12
  def initialize tracker
13
13
  super()
14
14
  @last = nil
15
15
  @tracker = tracker
16
- @ignore = Sexp.new :ignore
17
16
  @current_template = @current_module = @current_class = @current_method = nil
18
17
  end
19
18
 
19
+ def ignore
20
+ IGNORE
21
+ end
22
+
20
23
  def process_class exp
21
24
  current_class = @current_class
22
25
  @current_class = class_name exp[1]
23
- process exp[3]
26
+ process_all exp.body
24
27
  @current_class = current_class
25
28
  exp
26
29
  end
27
30
 
28
31
  #Process a new scope. Removes expressions that are set to nil.
29
32
  def process_scope exp
30
- exp = exp.dup
31
- exp.shift
32
- exp.map! do |e|
33
- res = process e
34
- if res.empty?
35
- res = nil
36
- else
37
- res
38
- end
39
- end.compact
40
- exp.unshift :scope
33
+ #NOPE?
41
34
  end
42
35
 
43
36
  #Default processing.
@@ -188,7 +181,7 @@ class Brakeman::BaseProcessor < Brakeman::SexpProcessor
188
181
 
189
182
  #Generates :render node from call to render.
190
183
  def make_render exp, in_view = false
191
- render_type, value, rest = find_render_type exp.args, in_view
184
+ render_type, value, rest = find_render_type exp, in_view
192
185
  rest = process rest
193
186
  result = Sexp.new(:render, render_type, value, rest)
194
187
  result.line(exp.line)
@@ -202,14 +195,14 @@ class Brakeman::BaseProcessor < Brakeman::SexpProcessor
202
195
  #:template, :text, :update, :xml
203
196
  #
204
197
  #And also :layout for inside templates
205
- def find_render_type args, in_view = false
198
+ def find_render_type call, in_view = false
206
199
  rest = Sexp.new(:hash)
207
200
  type = nil
208
201
  value = nil
209
- first_arg = args.first
202
+ first_arg = call.first_arg
210
203
 
211
- if args.length == 1 and first_arg == Sexp.new(:lit, :update)
212
- return :update, nil, Sexp.new(:arglist, *args[0..-2]) #TODO HUH?
204
+ if call.second_arg.nil? and first_arg == Sexp.new(:lit, :update)
205
+ return :update, nil, Sexp.new(:arglist, *call.args[0..-2]) #TODO HUH?
213
206
  end
214
207
 
215
208
  #Look for render :action, ... or render "action", ...
@@ -238,10 +231,12 @@ class Brakeman::BaseProcessor < Brakeman::SexpProcessor
238
231
  types_in_hash << :layout
239
232
  end
240
233
 
234
+ last_arg = call.last_arg
235
+
241
236
  #Look for "type" of render in options hash
242
237
  #For example, render :file => "blah"
243
- if hash? args.last
244
- hash_iterate(args.last) do |key, val|
238
+ if hash? last_arg
239
+ hash_iterate(last_arg) do |key, val|
245
240
  if symbol? key and types_in_hash.include? key.value
246
241
  type = key.value
247
242
  value = val
@@ -1,5 +1,6 @@
1
1
  require 'brakeman/processors/alias_processor'
2
2
  require 'brakeman/processors/lib/render_helper'
3
+ require 'brakeman/processors/lib/find_return_value'
3
4
 
4
5
  #Processes aliasing in controllers, but includes following
5
6
  #renders in routes and putting variables into templates
@@ -9,8 +10,9 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
9
10
  #If only_method is specified, only that method will be processed,
10
11
  #other methods will be skipped.
11
12
  #This is for rescanning just a single action.
12
- def initialize tracker, only_method = nil
13
+ def initialize app_tree, tracker, only_method = nil
13
14
  super()
15
+ @app_tree = app_tree
14
16
  @only_method = only_method
15
17
  @tracker = tracker
16
18
  @rendered = false
@@ -46,7 +48,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
46
48
  methods.each do |name|
47
49
  #Need to process the method like it was in a controller in order
48
50
  #to get the renders set
49
- processor = Brakeman::ControllerProcessor.new(@tracker)
51
+ processor = Brakeman::ControllerProcessor.new(@app_tree, @tracker)
50
52
  method = mixin[:public][name]
51
53
 
52
54
  if node_type? method, :methdef
@@ -97,7 +99,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
97
99
  end
98
100
  end
99
101
 
100
- process exp.body
102
+ process_all exp.body
101
103
 
102
104
  if is_route and not @rendered
103
105
  process_default_render exp
@@ -111,10 +113,18 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
111
113
  #Look for calls to head()
112
114
  def process_call exp
113
115
  exp = super
116
+ return exp unless call? exp
114
117
 
115
- if call? exp and exp.method == :head
118
+ method = exp.method
119
+
120
+ if method == :head
116
121
  @rendered = true
122
+ elsif @tracker.options[:interprocedural] and
123
+ @current_method and (exp.target.nil? or exp.target.node_type == :self)
124
+
125
+ exp = get_call_value(exp)
117
126
  end
127
+
118
128
  exp
119
129
  end
120
130
 
@@ -132,7 +142,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
132
142
  #Processes a call to a before filter.
133
143
  #Basically, adds any instance variable assignments to the environment.
134
144
  #TODO: method arguments?
135
- def process_before_filter name
145
+ def process_before_filter name
136
146
  filter = find_method name, @current_class
137
147
 
138
148
  if filter.nil?
@@ -148,7 +158,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
148
158
  end
149
159
  else
150
160
  processor = Brakeman::AliasProcessor.new @tracker
151
- processor.process_safely(method.body)
161
+ processor.process_safely(method.body_list)
152
162
 
153
163
  ivars = processor.only_ivars(:include_request_vars).all
154
164
 
@@ -200,9 +210,12 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
200
210
 
201
211
  #Returns true if the given method name is also a route
202
212
  def route? method
203
- return true if @tracker.routes[:allow_all_actions] or @tracker.options[:assume_all_routes]
204
- routes = @tracker.routes[@current_class]
205
- routes and (routes == :allow_all_actions or routes.include? method)
213
+ if @tracker.routes[:allow_all_actions] or @tracker.options[:assume_all_routes]
214
+ true
215
+ else
216
+ routes = @tracker.routes[@current_class]
217
+ routes and (routes == :allow_all_actions or routes.include? method)
218
+ end
206
219
  end
207
220
 
208
221
  #Get list of filters, including those that are inherited
@@ -236,9 +249,9 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
236
249
  end
237
250
 
238
251
  controller[:before_filter_cache].each do |f|
239
- if f[:all] or
252
+ if f[:all] or
240
253
  (f[:only] == method) or
241
- (f[:only].is_a? Array and f[:only].include? method) or
254
+ (f[:only].is_a? Array and f[:only].include? method) or
242
255
  (f[:except].is_a? Symbol and f[:except] != method) or
243
256
  (f[:except].is_a? Array and not f[:except].include? method)
244
257
 
@@ -2,10 +2,11 @@ require 'brakeman/processors/base_processor'
2
2
 
3
3
  #Processes controller. Results are put in tracker.controllers
4
4
  class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
5
- FORMAT_HTML = Sexp.new(:call, Sexp.new(:lvar, :format), :html, Sexp.new(:arglist))
5
+ FORMAT_HTML = Sexp.new(:call, Sexp.new(:lvar, :format), :html)
6
6
 
7
- def initialize tracker
8
- super
7
+ def initialize app_tree, tracker
8
+ super(tracker)
9
+ @app_tree = app_tree
9
10
  @controller = nil
10
11
  @current_method = nil
11
12
  @current_module = nil
@@ -49,7 +50,7 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
49
50
  :src => exp,
50
51
  :file => @file_name }
51
52
  @tracker.controllers[@controller[:name]] = @controller
52
- exp.body = process exp.body
53
+ exp.body = process_all! exp.body
53
54
  set_layout_name
54
55
  @controller = nil
55
56
  exp
@@ -63,12 +64,13 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
63
64
  end
64
65
 
65
66
  method = exp.method
66
- args = exp.args
67
+ first_arg = exp.first_arg
68
+ last_arg = exp.last_arg
67
69
 
68
70
  #Methods called inside class definition
69
71
  #like attr_* and other settings
70
72
  if @current_method.nil? and target.nil? and @controller
71
- if args.empty?
73
+ if first_arg.nil? #No args
72
74
  case method
73
75
  when :private, :protected, :public
74
76
  @visibility = method
@@ -80,21 +82,21 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
80
82
  else
81
83
  case method
82
84
  when :include
83
- @controller[:includes] << class_name(args.first) if @controller
85
+ @controller[:includes] << class_name(first_arg) if @controller
84
86
  when :before_filter
85
87
  @controller[:options][:before_filters] ||= []
86
- @controller[:options][:before_filters] << args
88
+ @controller[:options][:before_filters] << exp.args
87
89
  when :layout
88
- if string? args.last
90
+ if string? last_arg
89
91
  #layout "some_layout"
90
92
 
91
- name = args.last.value.to_s
92
- unless Dir.glob("#{@tracker.options[:app_path]}/app/views/layouts/#{name}.html.{erb,haml}").empty?
93
+ name = last_arg.value.to_s
94
+ if @app_tree.layout_exists?(name)
93
95
  @controller[:layout] = "layouts/#{name}"
94
96
  else
95
97
  Brakeman.debug "[Notice] Layout not found: #{name}"
96
98
  end
97
- elsif node_type? args.last, :nil, :false
99
+ elsif node_type? last_arg, :nil, :false
98
100
  #layout :false or layout nil
99
101
  @controller[:layout] = false
100
102
  end
@@ -107,7 +109,7 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
107
109
  exp
108
110
  elsif target == nil and method == :render
109
111
  make_render exp
110
- elsif exp == FORMAT_HTML and context[1] != :iter
112
+ elsif exp == FORMAT_HTML and context[1] != :iter
111
113
  #This is an empty call to
112
114
  # format.html
113
115
  #Which renders the default template if no arguments
@@ -116,7 +118,7 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
116
118
  call.line(exp.line)
117
119
  call
118
120
  else
119
- call = Sexp.new :call, target, method, process(exp.arglist) #RP 3 TODO
121
+ call = make_call target, method, process_all!(exp.args)
120
122
  call.line(exp.line)
121
123
  call
122
124
  end
@@ -126,11 +128,10 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
126
128
  def process_defn exp
127
129
  name = exp.method_name
128
130
  @current_method = name
129
- res = Sexp.new :methdef, name, process(exp[2]), process(exp.body.block)
131
+ res = Sexp.new :methdef, name, exp.formal_args, *process_all!(exp.body)
130
132
  res.line(exp.line)
131
133
  @current_method = nil
132
134
  @controller[@visibility][name] = res unless @controller.nil?
133
-
134
135
  res
135
136
  end
136
137
 
@@ -151,7 +152,7 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
151
152
  end
152
153
 
153
154
  @current_method = name
154
- res = Sexp.new :selfdef, target, name, process(exp[3]), process(exp.body.block)
155
+ res = Sexp.new :selfdef, target, name, exp.formal_args, *process_all!(exp.body)
155
156
  res.line(exp.line)
156
157
  @current_method = nil
157
158
  @controller[@visibility][name] = res unless @controller.nil?
@@ -175,7 +176,7 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
175
176
  name = underscore(@controller[:name].to_s.split("::")[-1].gsub("Controller", ''))
176
177
 
177
178
  #There is a layout for this Controller
178
- unless Dir.glob("#{@tracker.options[:app_path]}/app/views/layouts/#{name}.html.{erb,haml}").empty?
179
+ if @app_tree.layout_exists?(name)
179
180
  @controller[:layout] = "layouts/#{name}"
180
181
  end
181
182
  end
@@ -188,9 +189,9 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
188
189
  filter_name = ("fake_filter" + rand.to_s[/\d+$/]).to_sym
189
190
  args = exp.block_call.arglist
190
191
  args.insert(1, Sexp.new(:lit, filter_name))
191
- before_filter_call = Sexp.new(:call, nil, :before_filter, args)
192
+ before_filter_call = make_call(nil, :before_filter, args)
192
193
 
193
- if exp.block_args
194
+ if exp.block_args.length > 1
194
195
  block_variable = exp.block_args[1]
195
196
  else
196
197
  block_variable = :temp
@@ -203,12 +204,11 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
203
204
  end
204
205
 
205
206
  #Build Sexp for filter method
206
- body = Sexp.new(:scope,
207
- Sexp.new(:block,
208
- Sexp.new(:lasgn, block_variable,
209
- Sexp.new(:call, Sexp.new(:const, @controller[:name]), :new, Sexp.new(:arglist)))).concat(block_inner))
207
+ body = Sexp.new(:lasgn,
208
+ block_variable,
209
+ Sexp.new(:call, Sexp.new(:const, @controller[:name]), :new))
210
210
 
211
- filter_method = Sexp.new(:defn, filter_name, Sexp.new(:args), body).line(exp.line)
211
+ filter_method = Sexp.new(:defn, filter_name, Sexp.new(:args), body).concat(block_inner).line(exp.line)
212
212
 
213
213
  vis = @visibility
214
214
  @visibility = :private
@@ -4,7 +4,7 @@ require 'brakeman/processors/template_processor'
4
4
  #(those ending in .html.erb or .rthml).
5
5
  class Brakeman::ErbTemplateProcessor < Brakeman::TemplateProcessor
6
6
 
7
- #s(:call, TARGET, :method, s(:arglist))
7
+ #s(:call, TARGET, :method, ARGS)
8
8
  def process_call exp
9
9
  target = exp.target
10
10
  if sexp? target
@@ -16,14 +16,14 @@ class Brakeman::ErbTemplateProcessor < Brakeman::TemplateProcessor
16
16
  if node_type? target, :lvar and target.value == :_erbout
17
17
  if method == :concat
18
18
  @inside_concat = true
19
- args = exp.arglist = process(exp.arglist)
19
+ exp.arglist = process(exp.arglist)
20
20
  @inside_concat = false
21
21
 
22
- if args.length > 2
22
+ if exp.second_arg
23
23
  raise Exception.new("Did not expect more than a single argument to _erbout.concat")
24
24
  end
25
25
 
26
- arg = args[1]
26
+ arg = exp.first_arg
27
27
 
28
28
  if arg.node_type == :call and arg.method == :to_s #erb always calls to_s on output
29
29
  arg = arg.target
@@ -47,8 +47,7 @@ class Brakeman::ErbTemplateProcessor < Brakeman::TemplateProcessor
47
47
  make_render_in_view exp
48
48
  else
49
49
  #TODO: Is it really necessary to create a new Sexp here?
50
- args = exp.arglist = process(exp.arglist)
51
- call = Sexp.new :call, target, method, args
50
+ call = make_call target, method, process_all!(exp.args)
52
51
  call.original_line(exp.original_line)
53
52
  call.line(exp.line)
54
53
  call
@@ -64,7 +63,7 @@ class Brakeman::ErbTemplateProcessor < Brakeman::TemplateProcessor
64
63
  process e
65
64
  end
66
65
  @inside_concat = true
67
- process exp[-1]
66
+ process exp.last
68
67
  else
69
68
  exp.map! do |e|
70
69
  res = process e
@@ -3,7 +3,7 @@ require 'brakeman/processors/template_processor'
3
3
  #Processes ERB templates using Erubis instead of erb.
4
4
  class Brakeman::ErubisTemplateProcessor < Brakeman::TemplateProcessor
5
5
 
6
- #s(:call, TARGET, :method, s(:arglist))
6
+ #s(:call, TARGET, :method, ARGS)
7
7
  def process_call exp
8
8
  target = exp.target
9
9
  if sexp? target
@@ -46,8 +46,7 @@ class Brakeman::ErubisTemplateProcessor < Brakeman::TemplateProcessor
46
46
  make_render_in_view exp
47
47
  else
48
48
  #TODO: Is it really necessary to create a new Sexp here?
49
- args = exp.arglist = process(exp.arglist)
50
- call = Sexp.new :call, target, method, args
49
+ call = make_call target, method, process_all!(exp.args)
51
50
  call.original_line(exp.original_line)
52
51
  call.line(exp.line)
53
52
  call
@@ -27,12 +27,13 @@ class Brakeman::GemProcessor < Brakeman::BaseProcessor
27
27
 
28
28
  def process_call exp
29
29
  if exp.target == nil and exp.method == :gem
30
- args = exp.args
30
+ gem_name = exp.first_arg
31
+ gem_version = exp.second_arg
31
32
 
32
- if string? args.second
33
- @tracker.config[:gems][args.first.value.to_sym] = args.second.value
33
+ if string? gem_version
34
+ @tracker.config[:gems][gem_name.value.to_sym] = gem_version.value
34
35
  else
35
- @tracker.config[:gems][args.first.value.to_sym] = ">=0.0.0"
36
+ @tracker.config[:gems][gem_name.value.to_sym] = ">=0.0.0"
36
37
  end
37
38
  end
38
39
 
@@ -36,14 +36,13 @@ class Brakeman::HamlTemplateProcessor < Brakeman::TemplateProcessor
36
36
  when :options, :buffer
37
37
  exp
38
38
  when :open_tag
39
- process(exp.arglist)
40
- exp
39
+ process_call_args exp
41
40
  else
42
41
  arg = exp.first_arg
43
42
 
44
43
  if arg
45
44
  @inside_concat = true
46
- out = exp.arglist[1] = process(arg)
45
+ out = exp.first_arg = process(arg)
47
46
  @inside_concat = false
48
47
  else
49
48
  raise Exception.new("Empty _hamlout.#{method}()?")
@@ -78,7 +77,7 @@ class Brakeman::HamlTemplateProcessor < Brakeman::TemplateProcessor
78
77
  #Has something to do with values of blocks?
79
78
  elsif sexp? target and method == :<< and is_buffer_target? target
80
79
  @inside_concat = true
81
- out = exp.arglist[1] = process(exp.arglist[1])
80
+ out = exp.first_arg = process(exp.first_arg)
82
81
  @inside_concat = false
83
82
 
84
83
  if out.node_type == :str #ignore plain strings
@@ -95,8 +94,7 @@ class Brakeman::HamlTemplateProcessor < Brakeman::TemplateProcessor
95
94
  make_render_in_view exp
96
95
  else
97
96
  #TODO: Do we really need a new Sexp here?
98
- args = process exp.arglist
99
- call = Sexp.new :call, target, method, args
97
+ call = make_call target, method, process_all!(exp.args)
100
98
  call.original_line(exp.original_line)
101
99
  call.line(exp.line)
102
100
  call
@@ -22,12 +22,12 @@ class Brakeman::FindAllCalls < Brakeman::BaseProcessor
22
22
 
23
23
  #Process body of method
24
24
  def process_methdef exp
25
- process exp.body
25
+ process_all exp.body
26
26
  end
27
27
 
28
28
  #Process body of method
29
29
  def process_selfdef exp
30
- process exp.body
30
+ process_all exp.body
31
31
  end
32
32
 
33
33
  #Process body of block
@@ -46,7 +46,7 @@ class Brakeman::FindAllCalls < Brakeman::BaseProcessor
46
46
  end
47
47
 
48
48
  method = exp.method
49
- process_all exp.args
49
+ process_call_args exp
50
50
 
51
51
  call = { :target => target, :method => method, :call => exp, :nested => @in_target, :chain => get_chain(exp) }
52
52