brakeman 3.0.5 → 3.1.0

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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +19 -0
  3. data/README.md +3 -13
  4. data/lib/brakeman.rb +3 -0
  5. data/lib/brakeman/checks/base_check.rb +19 -47
  6. data/lib/brakeman/checks/check_basic_auth.rb +3 -3
  7. data/lib/brakeman/checks/check_cross_site_scripting.rb +26 -12
  8. data/lib/brakeman/checks/check_default_routes.rb +1 -1
  9. data/lib/brakeman/checks/check_detailed_exceptions.rb +2 -2
  10. data/lib/brakeman/checks/check_evaluation.rb +3 -0
  11. data/lib/brakeman/checks/check_execute.rb +3 -3
  12. data/lib/brakeman/checks/check_file_disclosure.rb +2 -2
  13. data/lib/brakeman/checks/check_forgery_setting.rb +9 -12
  14. data/lib/brakeman/checks/check_header_dos.rb +1 -1
  15. data/lib/brakeman/checks/check_i18n_xss.rb +2 -2
  16. data/lib/brakeman/checks/check_jruby_xml.rb +1 -1
  17. data/lib/brakeman/checks/check_json_encoding.rb +1 -1
  18. data/lib/brakeman/checks/check_json_parsing.rb +3 -3
  19. data/lib/brakeman/checks/check_link_to.rb +1 -1
  20. data/lib/brakeman/checks/check_link_to_href.rb +9 -2
  21. data/lib/brakeman/checks/check_mass_assignment.rb +5 -2
  22. data/lib/brakeman/checks/check_model_attr_accessible.rb +4 -4
  23. data/lib/brakeman/checks/check_model_attributes.rb +7 -7
  24. data/lib/brakeman/checks/check_model_serialize.rb +6 -6
  25. data/lib/brakeman/checks/check_nested_attributes.rb +2 -2
  26. data/lib/brakeman/checks/check_number_to_currency.rb +2 -2
  27. data/lib/brakeman/checks/check_quote_table_name.rb +1 -1
  28. data/lib/brakeman/checks/check_redirect.rb +2 -10
  29. data/lib/brakeman/checks/check_render.rb +1 -1
  30. data/lib/brakeman/checks/check_render_dos.rb +1 -1
  31. data/lib/brakeman/checks/check_safe_buffer_manipulation.rb +1 -1
  32. data/lib/brakeman/checks/check_sanitize_methods.rb +1 -1
  33. data/lib/brakeman/checks/check_select_tag.rb +1 -1
  34. data/lib/brakeman/checks/check_select_vulnerability.rb +2 -2
  35. data/lib/brakeman/checks/check_session_settings.rb +1 -2
  36. data/lib/brakeman/checks/check_simple_format.rb +2 -2
  37. data/lib/brakeman/checks/check_single_quotes.rb +3 -3
  38. data/lib/brakeman/checks/check_skip_before_filter.rb +5 -7
  39. data/lib/brakeman/checks/check_sql.rb +10 -14
  40. data/lib/brakeman/checks/check_sql_cves.rb +4 -4
  41. data/lib/brakeman/checks/check_ssl_verify.rb +27 -9
  42. data/lib/brakeman/checks/check_strip_tags.rb +5 -5
  43. data/lib/brakeman/checks/check_symbol_dos_cve.rb +1 -1
  44. data/lib/brakeman/checks/check_translate_bug.rb +3 -4
  45. data/lib/brakeman/checks/check_unscoped_find.rb +1 -1
  46. data/lib/brakeman/checks/check_validation_regex.rb +2 -2
  47. data/lib/brakeman/checks/check_xml_dos.rb +1 -1
  48. data/lib/brakeman/checks/check_yaml_parsing.rb +1 -1
  49. data/lib/brakeman/file_parser.rb +1 -0
  50. data/lib/brakeman/parsers/template_parser.rb +6 -5
  51. data/lib/brakeman/processor.rb +7 -7
  52. data/lib/brakeman/processors/alias_processor.rb +30 -12
  53. data/lib/brakeman/processors/base_processor.rb +4 -8
  54. data/lib/brakeman/processors/controller_alias_processor.rb +33 -132
  55. data/lib/brakeman/processors/controller_processor.rb +29 -53
  56. data/lib/brakeman/processors/erb_template_processor.rb +4 -6
  57. data/lib/brakeman/processors/erubis_template_processor.rb +8 -11
  58. data/lib/brakeman/processors/gem_processor.rb +19 -35
  59. data/lib/brakeman/processors/haml_template_processor.rb +10 -12
  60. data/lib/brakeman/processors/lib/find_all_calls.rb +3 -5
  61. data/lib/brakeman/processors/lib/find_call.rb +2 -2
  62. data/lib/brakeman/processors/lib/find_return_value.rb +1 -1
  63. data/lib/brakeman/processors/lib/rails2_config_processor.rb +7 -8
  64. data/lib/brakeman/processors/lib/rails3_config_processor.rb +6 -7
  65. data/lib/brakeman/processors/lib/render_helper.rb +15 -14
  66. data/lib/brakeman/processors/lib/render_path.rb +11 -5
  67. data/lib/brakeman/processors/library_processor.rb +13 -35
  68. data/lib/brakeman/processors/model_processor.rb +22 -64
  69. data/lib/brakeman/processors/output_processor.rb +1 -37
  70. data/lib/brakeman/processors/slim_template_processor.rb +6 -8
  71. data/lib/brakeman/processors/template_alias_processor.rb +9 -9
  72. data/lib/brakeman/processors/template_processor.rb +5 -9
  73. data/lib/brakeman/report/report_base.rb +7 -7
  74. data/lib/brakeman/report/report_html.rb +5 -7
  75. data/lib/brakeman/report/report_markdown.rb +4 -6
  76. data/lib/brakeman/report/report_table.rb +4 -6
  77. data/lib/brakeman/rescanner.rb +29 -31
  78. data/lib/brakeman/scanner.rb +17 -8
  79. data/lib/brakeman/tracker.rb +24 -34
  80. data/lib/brakeman/tracker/collection.rb +77 -0
  81. data/lib/brakeman/tracker/config.rb +93 -0
  82. data/lib/brakeman/tracker/controller.rb +161 -0
  83. data/lib/brakeman/tracker/library.rb +17 -0
  84. data/lib/brakeman/tracker/model.rb +90 -0
  85. data/lib/brakeman/tracker/template.rb +33 -0
  86. data/lib/brakeman/util.rb +17 -9
  87. data/lib/brakeman/version.rb +1 -1
  88. data/lib/brakeman/warning.rb +8 -9
  89. data/lib/ruby_parser/bm_sexp.rb +16 -16
  90. data/lib/ruby_parser/bm_sexp_processor.rb +1 -120
  91. metadata +42 -31
  92. checksums.yaml.gz.sig +0 -1
  93. data.tar.gz.sig +0 -0
  94. metadata.gz.sig +0 -0
@@ -1,4 +1,5 @@
1
1
  require 'brakeman/processors/base_processor'
2
+ require 'brakeman/tracker/template'
2
3
 
3
4
  #Base Processor for templates/views
4
5
  class Brakeman::TemplateProcessor < Brakeman::BaseProcessor
@@ -6,13 +7,8 @@ class Brakeman::TemplateProcessor < Brakeman::BaseProcessor
6
7
  #Initializes template information.
7
8
  def initialize tracker, template_name, called_from = nil, file_name = nil
8
9
  super(tracker)
9
- @current_template = { :name => template_name,
10
- :caller => called_from,
11
- :partial => template_name.to_s[0,1] == "_",
12
- :outputs => [],
13
- :src => nil, #set in Processor
14
- :type => nil, #set in Processor
15
- :file => file_name }
10
+ @current_template = Brakeman::Template.new template_name, called_from, file_name, tracker
11
+
16
12
  if called_from
17
13
  template_name = (template_name.to_s + "." + called_from.to_s).to_sym
18
14
  end
@@ -27,7 +23,7 @@ class Brakeman::TemplateProcessor < Brakeman::BaseProcessor
27
23
  begin
28
24
  super
29
25
  rescue => e
30
- except = e.exception("Error when processing #{@current_template[:name]}: #{e.message}")
26
+ except = e.exception("Error when processing #{@current_template.name}: #{e.message}")
31
27
  except.set_backtrace(e.backtrace)
32
28
  raise except
33
29
  end
@@ -48,7 +44,7 @@ class Brakeman::TemplateProcessor < Brakeman::BaseProcessor
48
44
  #Adds output to the list of outputs.
49
45
  def process_output exp
50
46
  exp.value = process exp.value
51
- @current_template[:outputs] << exp unless exp.original_line
47
+ @current_template.add_output exp unless exp.original_line
52
48
  exp
53
49
  end
54
50
 
@@ -40,7 +40,7 @@ class Brakeman::Report::Base
40
40
  c = tracker.controllers[name]
41
41
 
42
42
  if tracker.routes.include? :allow_all_actions or (tracker.routes[name] and tracker.routes[name].include? :allow_all_actions)
43
- routes = c[:public].keys.map{|e| e.to_s}.sort.join(", ")
43
+ routes = c.methods_public.keys.map{|e| e.to_s}.sort.join(", ")
44
44
  elsif tracker.routes[name].nil?
45
45
  #No routes defined for this controller.
46
46
  #This can happen when it is only a parent class
@@ -48,7 +48,7 @@ class Brakeman::Report::Base
48
48
  routes = "[None]"
49
49
 
50
50
  else
51
- routes = (Set.new(c[:public].keys) & tracker.routes[name.to_sym]).
51
+ routes = (Set.new(c.methods_public.keys) & tracker.routes[name.to_sym]).
52
52
  to_a.
53
53
  map {|e| e.to_s}.
54
54
  sort.
@@ -60,8 +60,8 @@ class Brakeman::Report::Base
60
60
  end
61
61
 
62
62
  controller_rows << { "Name" => name.to_s,
63
- "Parent" => c[:parent].to_s,
64
- "Includes" => c[:includes].join(", "),
63
+ "Parent" => c.parent.to_s,
64
+ "Includes" => c.includes.join(", "),
65
65
  "Routes" => routes
66
66
  }
67
67
  end
@@ -248,7 +248,7 @@ class Brakeman::Report::Base
248
248
  end
249
249
 
250
250
  def number_of_templates tracker
251
- Set.new(tracker.templates.map {|k,v| v[:name].to_s[/[^.]+/]}).length
251
+ Set.new(tracker.templates.map {|k,v| v.name.to_s[/[^.]+/]}).length
252
252
  end
253
253
 
254
254
  def warning_file warning, absolute = @tracker.options[:absolute_paths]
@@ -263,8 +263,8 @@ class Brakeman::Report::Base
263
263
 
264
264
  def rails_version
265
265
  case
266
- when tracker.config[:rails_version]
267
- tracker.config[:rails_version]
266
+ when tracker.config.rails_version
267
+ tracker.config.rails_version
268
268
  when tracker.options[:rails4]
269
269
  "4.x"
270
270
  when tracker.options[:rails3]
@@ -47,12 +47,10 @@ class Brakeman::Report::HTML < Brakeman::Report::Base
47
47
  out_processor = Brakeman::OutputProcessor.new
48
48
  template_rows = {}
49
49
  tracker.templates.each do |name, template|
50
- unless template[:outputs].empty?
51
- template[:outputs].each do |out|
52
- out = CGI.escapeHTML(out_processor.format(out))
53
- template_rows[name] ||= []
54
- template_rows[name] << out.gsub("\n", ";").gsub(/\s+/, " ")
55
- end
50
+ template.each_output do |out|
51
+ out = CGI.escapeHTML(out_processor.format(out))
52
+ template_rows[name] ||= []
53
+ template_rows[name] << out.gsub("\n", ";").gsub(/\s+/, " ")
56
54
  end
57
55
  end
58
56
 
@@ -83,7 +81,7 @@ class Brakeman::Report::HTML < Brakeman::Report::Base
83
81
  warning["Message"] = with_context original, warning["Message"]
84
82
  warning["Warning Type"] = with_link original, warning["Warning Type"]
85
83
  warning["Called From"] = original.called_from
86
- warning["Template Name"] = original.template[:name]
84
+ warning["Template Name"] = original.template.name
87
85
  warning
88
86
  end
89
87
 
@@ -99,12 +99,10 @@ class Brakeman::Report::Markdown < Brakeman::Report::Base
99
99
  out_processor = Brakeman::OutputProcessor.new
100
100
  template_rows = {}
101
101
  tracker.templates.each do |name, template|
102
- unless template[:outputs].empty?
103
- template[:outputs].each do |out|
104
- out = out_processor.format out
105
- template_rows[name] ||= []
106
- template_rows[name] << out.gsub("\n", ";").gsub(/\s+/, " ")
107
- end
102
+ template.each_output do |out|
103
+ out = out_processor.format out
104
+ template_rows[name] ||= []
105
+ template_rows[name] << out.gsub("\n", ";").gsub(/\s+/, " ")
108
106
  end
109
107
  end
110
108
 
@@ -57,12 +57,10 @@ class Brakeman::Report::Table < Brakeman::Report::Base
57
57
  out_processor = Brakeman::OutputProcessor.new
58
58
  template_rows = {}
59
59
  tracker.templates.each do |name, template|
60
- unless template[:outputs].empty?
61
- template[:outputs].each do |out|
62
- out = out_processor.format out
63
- template_rows[name] ||= []
64
- template_rows[name] << out.gsub("\n", ";").gsub(/\s+/, " ")
65
- end
60
+ template.each_output do |out|
61
+ out = out_processor.format out
62
+ template_rows[name] ||= []
63
+ template_rows[name] << out.gsub("\n", ";").gsub(/\s+/, " ")
66
64
  end
67
65
  end
68
66
 
@@ -88,8 +88,8 @@ class Brakeman::Rescanner < Brakeman::Scanner
88
88
  when :routes
89
89
  rescan_routes
90
90
  when :gemfile
91
- if tracker.config[:gems][:rails_xss] and tracker.config[:escape_html]
92
- tracker.config[:escape_html] = false
91
+ if tracker.config.has_gem? :rails_xss and tracker.config.escape_html?
92
+ tracker.config.escape_html = false
93
93
  end
94
94
 
95
95
  process_gems
@@ -102,7 +102,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
102
102
 
103
103
  def rescan_controller path
104
104
  controller = tracker.reset_controller path
105
- paths = controller.nil? ? [path] : controller[:files]
105
+ paths = controller.nil? ? [path] : controller.files
106
106
  parse_ruby_files(paths).each do |astfile|
107
107
  process_controller astfile
108
108
  end
@@ -110,16 +110,16 @@ class Brakeman::Rescanner < Brakeman::Scanner
110
110
  #Process data flow and template rendering
111
111
  #from the controller
112
112
  tracker.controllers.each do |name, controller|
113
- if controller[:files].include?(path)
113
+ if controller.files.include?(path)
114
114
  tracker.templates.each do |template_name, template|
115
- next unless template[:caller]
116
- if template[:caller].include_controller? name
115
+ next unless template.render_path
116
+ if template.render_path.include_controller? name
117
117
  tracker.reset_template template_name
118
118
  end
119
119
  end
120
120
 
121
- controller[:src].each_value do |src|
122
- @processor.process_controller_alias controller[:name], src
121
+ controller.src.each do |file, src|
122
+ @processor.process_controller_alias controller.name, src, nil, file
123
123
  end
124
124
  end
125
125
  end
@@ -145,10 +145,10 @@ class Brakeman::Rescanner < Brakeman::Scanner
145
145
  #Search for processed template and process it.
146
146
  #Search for rendered versions of template and re-render (if necessary)
147
147
  tracker.templates.each do |name, template|
148
- if template[:file] == path or template[:file].nil?
149
- next unless template[:caller] and template[:name].to_sym == template_name.to_sym
148
+ if template.file == path or template.file.nil?
149
+ next unless template.render_path and template.name.to_sym == template_name.to_sym
150
150
 
151
- template[:caller].each do |from|
151
+ template.render_path.each do |from|
152
152
  case from[:type]
153
153
  when :template
154
154
  rescan << [:template, from[:name]]
@@ -163,15 +163,15 @@ class Brakeman::Rescanner < Brakeman::Scanner
163
163
  if r[0] == :controller
164
164
  controller = tracker.controllers[r[1]]
165
165
 
166
- controller[:src].each do |file, src|
166
+ controller.src.each do |file, src|
167
167
  unless @paths.include? file
168
- @processor.process_controller_alias controller[:name], src, r[2]
168
+ @processor.process_controller_alias controller.name, src, r[2], file
169
169
  end
170
170
  end
171
171
  elsif r[0] == :template
172
172
  template = tracker.templates[r[1]]
173
173
 
174
- rescan_template template[:file]
174
+ rescan_template template.file
175
175
  end
176
176
  end
177
177
 
@@ -181,7 +181,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
181
181
  def rescan_model path
182
182
  num_models = tracker.models.length
183
183
  model = tracker.reset_model path
184
- paths = model.nil? ? [path] : model[:files]
184
+ paths = model.nil? ? [path] : model.files
185
185
  parse_ruby_files(paths).each do |astfile|
186
186
  process_model astfile.path, astfile.ast
187
187
  end
@@ -198,7 +198,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
198
198
 
199
199
  def rescan_lib path
200
200
  lib = tracker.reset_lib path
201
- paths = lib.nil? ? [path] : lib[:files]
201
+ paths = lib.nil? ? [path] : lib.files
202
202
  parse_ruby_files(paths).each do |astfile|
203
203
  process_lib astfile
204
204
  end
@@ -206,7 +206,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
206
206
  lib = nil
207
207
 
208
208
  tracker.libs.each do |name, library|
209
- if library[:files].include?(path)
209
+ if library.files.include?(path)
210
210
  lib = library
211
211
  break
212
212
  end
@@ -269,7 +269,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
269
269
 
270
270
  #Remove any rendered versions, or partials rendered from it
271
271
  tracker.templates.delete_if do |name, template|
272
- template[:file] == path or template[:name].to_sym == template_name.to_sym
272
+ template.file == path or template.name.to_sym == template_name.to_sym
273
273
  end
274
274
  end
275
275
 
@@ -277,7 +277,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
277
277
  deleted_lib = nil
278
278
 
279
279
  tracker.libs.delete_if do |name, lib|
280
- if lib[:files].include?(path)
280
+ if lib.files.include?(path)
281
281
  deleted_lib = lib
282
282
  true
283
283
  end
@@ -297,7 +297,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
297
297
 
298
298
  [:controllers, :models, :libs].each do |collection|
299
299
  tracker.send(collection).delete_if do |name, data|
300
- if data[:files].include?(path)
300
+ if data.files.include?(path)
301
301
  deleted = true
302
302
  true
303
303
  end
@@ -305,7 +305,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
305
305
  end
306
306
 
307
307
  tracker.templates.delete_if do |name, data|
308
- if data[:file] == path
308
+ if data.file == path
309
309
  deleted = true
310
310
  true
311
311
  end
@@ -331,7 +331,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
331
331
  :routes
332
332
  when /\/config\/.+\.rb/
333
333
  :config
334
- when /Gemfile/
334
+ when /Gemfile|gems\./
335
335
  :gemfile
336
336
  else
337
337
  :unknown
@@ -341,18 +341,16 @@ class Brakeman::Rescanner < Brakeman::Scanner
341
341
  def rescan_mixin lib
342
342
  method_names = []
343
343
 
344
- [:public, :private, :protected].each do |access|
345
- lib[access].each do |name, meth|
346
- method_names << name
347
- end
344
+ lib.each_method do |name, meth|
345
+ method_names << name
348
346
  end
349
347
 
350
348
  to_rescan = []
351
349
 
352
350
  #Rescan controllers that mixed in library
353
351
  tracker.controllers.each do |name, controller|
354
- if controller[:includes].include? lib[:name]
355
- controller[:files].each do |path|
352
+ if controller.includes.include? lib.name
353
+ controller.files.each do |path|
356
354
  unless @paths.include? path
357
355
  to_rescan << path
358
356
  end
@@ -371,15 +369,15 @@ class Brakeman::Rescanner < Brakeman::Scanner
371
369
  #This is not precise, because a different controller might have the
372
370
  #same method...
373
371
  tracker.templates.each do |name, template|
374
- next unless template[:caller]
372
+ next unless template.render_path
375
373
 
376
- if template[:caller].include_any_method? method_names
374
+ if template.render_path.include_any_method? method_names
377
375
  name.to_s.match /^([^.]+)/
378
376
 
379
377
  original = tracker.templates[$1.to_sym]
380
378
 
381
379
  if original
382
- to_rescan << [name, original[:file]]
380
+ to_rescan << [name, original.file]
383
381
  end
384
382
  end
385
383
  end
@@ -107,7 +107,7 @@ class Brakeman::Scanner
107
107
  if @app_tree.exists?("vendor/plugins/rails_xss") or
108
108
  options[:rails3] or options[:escape_html]
109
109
 
110
- tracker.config[:escape_html] = true
110
+ tracker.config.escape_html = true
111
111
  Brakeman.notify "[Notice] Escaping HTML by default"
112
112
  end
113
113
  end
@@ -128,12 +128,21 @@ class Brakeman::Scanner
128
128
 
129
129
  #Process Gemfile
130
130
  def process_gems
131
+ gem_files = {}
131
132
  if @app_tree.exists? "Gemfile"
132
- if @app_tree.exists? "Gemfile.lock"
133
- @processor.process_gems(parse_ruby(@app_tree.read("Gemfile")), @app_tree.read("Gemfile.lock"))
134
- else
135
- @processor.process_gems(parse_ruby(@app_tree.read("Gemfile")))
136
- end
133
+ gem_files[:gemfile] = { :src => parse_ruby(@app_tree.read("Gemfile")), :file => "Gemfile" }
134
+ elsif @app_tree.exists? "gems.rb"
135
+ gem_files[:gemfile] = { :src => parse_ruby(@app_tree.read("gems.rb")), :file => "gems.rb" }
136
+ end
137
+
138
+ if @app_tree.exists? "Gemfile.lock"
139
+ gem_files[:gemlock] = { :src => @app_tree.read("Gemfile.lock"), :file => "Gemfile.lock" }
140
+ elsif @app_tree.exists? "gems.locked"
141
+ gem_files[:gemlock] = { :src => @app_tree.read("gems.locked"), :file => "gems.locked" }
142
+ end
143
+
144
+ if gem_files[:gemfile] or gem_files[:gemlock]
145
+ @processor.process_gems gem_files
137
146
  end
138
147
  rescue => e
139
148
  Brakeman.notify "[Notice] Error while processing Gemfile."
@@ -221,8 +230,8 @@ class Brakeman::Scanner
221
230
 
222
231
  track_progress controllers, "controllers" do |name, controller|
223
232
  Brakeman.debug "Processing #{name}"
224
- controller[:src].each_value do |src|
225
- @processor.process_controller_alias name, src
233
+ controller.src.each do |file, src|
234
+ @processor.process_controller_alias name, src, nil, file
226
235
  end
227
236
  end
228
237
 
@@ -4,6 +4,7 @@ require 'brakeman/checks'
4
4
  require 'brakeman/report'
5
5
  require 'brakeman/processors/lib/find_call'
6
6
  require 'brakeman/processors/lib/find_all_calls'
7
+ require 'brakeman/tracker/config'
7
8
 
8
9
  #The Tracker keeps track of all the processed information.
9
10
  class Brakeman::Tracker
@@ -25,20 +26,14 @@ class Brakeman::Tracker
25
26
  @processor = processor
26
27
  @options = options
27
28
 
28
- @config = { :rails => {}, :gems => {} }
29
+ @config = Brakeman::Config.new(self)
29
30
  @templates = {}
30
31
  @controllers = {}
31
32
  #Initialize models with the unknown model so
32
33
  #we can match models later without knowing precisely what
33
34
  #class they are.
34
- @models = { UNKNOWN_MODEL => { :name => UNKNOWN_MODEL,
35
- :parent => nil,
36
- :includes => [],
37
- :public => {},
38
- :private => {},
39
- :protected => {},
40
- :options => {},
41
- :files => [] } }
35
+ @models = {}
36
+ @models[UNKNOWN_MODEL] = Brakeman::Model.new(UNKNOWN_MODEL, nil, nil, nil, self)
42
37
  @routes = {}
43
38
  @initializers = {}
44
39
  @errors = []
@@ -90,17 +85,15 @@ class Brakeman::Tracker
90
85
  end
91
86
 
92
87
  classes.each do |set|
93
- set.each do |set_name, info|
94
- [:private, :public, :protected].each do |visibility|
95
- info[visibility].each do |method_name, definition|
96
- src = definition[:src]
97
- if src.node_type == :selfdef
98
- method_name = "#{src[1]}.#{method_name}"
99
- end
88
+ set.each do |set_name, collection|
89
+ collection.each_method do |method_name, definition|
90
+ src = definition[:src]
91
+ if src.node_type == :defs
92
+ method_name = "#{src[1]}.#{method_name}"
93
+ end
100
94
 
101
- yield src, set_name, method_name, definition[:file]
95
+ yield src, set_name, method_name, definition[:file]
102
96
 
103
- end
104
97
  end
105
98
  end
106
99
  end
@@ -186,7 +179,7 @@ class Brakeman::Tracker
186
179
  end
187
180
 
188
181
  self.each_template do |name, template|
189
- finder.process_source template[:src], :template => template, :file => template[:file]
182
+ finder.process_source template.src, :template => template, :file => template.file
190
183
  end
191
184
 
192
185
  @call_index = Brakeman::CallIndex.new finder.calls
@@ -228,23 +221,20 @@ class Brakeman::Tracker
228
221
 
229
222
  method_sets.each do |set|
230
223
  set.each do |set_name, info|
231
- [:private, :public, :protected].each do |visibility|
232
- info[visibility].each do |method_name, definition|
233
- src = definition[:src]
234
- if src.node_type == :selfdef
235
- method_name = "#{src[1]}.#{method_name}"
236
- end
237
-
238
- finder.process_source src, :class => set_name, :method => method_name, :file => definition[:file]
239
-
224
+ info.each_method do |method_name, definition|
225
+ src = definition[:src]
226
+ if src.node_type == :defs
227
+ method_name = "#{src[1]}.#{method_name}"
240
228
  end
229
+
230
+ finder.process_source src, :class => set_name, :method => method_name, :file => definition[:file]
241
231
  end
242
232
  end
243
233
  end
244
234
 
245
235
  if locations.include? :templates
246
236
  self.each_template do |name, template|
247
- finder.process_source template[:src], :template => template, :file => template[:file]
237
+ finder.process_source template.src, :template => template, :file => template.file
248
238
  end
249
239
  end
250
240
 
@@ -257,7 +247,7 @@ class Brakeman::Tracker
257
247
  def reset_templates options = { :only_rendered => false }
258
248
  if options[:only_rendered]
259
249
  @templates.delete_if do |name, template|
260
- template[:caller] and template[:caller].rendered_from_controller?
250
+ template.rendered_from_controller?
261
251
  end
262
252
  else
263
253
  @templates = {}
@@ -281,7 +271,7 @@ class Brakeman::Tracker
281
271
  model_name = nil
282
272
 
283
273
  @models.each do |name, model|
284
- if model[:files].include?(path)
274
+ if model.files.include?(path)
285
275
  model_name = name
286
276
  break
287
277
  end
@@ -295,7 +285,7 @@ class Brakeman::Tracker
295
285
  lib_name = nil
296
286
 
297
287
  @libs.each do |name, lib|
298
- if lib[:files].include?(path)
288
+ if lib.files.include?(path)
299
289
  lib_name = name
300
290
  break
301
291
  end
@@ -309,12 +299,12 @@ class Brakeman::Tracker
309
299
 
310
300
  #Remove from controller
311
301
  @controllers.each do |name, controller|
312
- if controller[:files].include?(path)
302
+ if controller.files.include?(path)
313
303
  controller_name = name
314
304
 
315
305
  #Remove templates rendered from this controller
316
306
  @templates.each do |template_name, template|
317
- if template[:caller] and template[:caller].include_controller? name
307
+ if template.render_path and template.render_path.include_controller? name
318
308
  reset_template template_name
319
309
  @call_index.remove_template_indexes template_name
320
310
  end