brakeman 1.8.3 → 1.9.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
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