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
@@ -129,6 +129,10 @@ module Brakeman::Util
129
129
  exp.is_a? Sexp and exp.node_type == :str
130
130
  end
131
131
 
132
+ def string_interp? exp
133
+ exp.is_a? Sexp and exp.node_type == :dstr
134
+ end
135
+
132
136
  #Check if _exp_ represents a Symbol: s(:lit, :...)
133
137
  def symbol? exp
134
138
  exp.is_a? Sexp and exp.node_type == :lit and exp[1].is_a? Symbol
@@ -267,6 +271,10 @@ module Brakeman::Util
267
271
  call
268
272
  end
269
273
 
274
+ def rails_version
275
+ @tracker.config.rails_version
276
+ end
277
+
270
278
  #Return file name related to given warning. Uses +warning.file+ if it exists
271
279
  def file_for warning, tracker = nil
272
280
  if tracker.nil?
@@ -275,14 +283,14 @@ module Brakeman::Util
275
283
 
276
284
  if warning.file
277
285
  File.expand_path warning.file, tracker.app_path
278
- elsif warning.template.is_a? Hash and warning.template[:file]
279
- warning.template[:file]
286
+ elsif warning.template and warning.template.file
287
+ warning.template.file
280
288
  else
281
289
  case warning.warning_set
282
290
  when :controller
283
291
  file_by_name warning.controller, :controller, tracker
284
292
  when :template
285
- file_by_name warning.template[:name], :template, tracker
293
+ file_by_name warning.template.name, :template, tracker
286
294
  when :model
287
295
  file_by_name warning.model, :model, tracker
288
296
  when :warning
@@ -318,20 +326,20 @@ module Brakeman::Util
318
326
 
319
327
  case type
320
328
  when :controller
321
- if tracker.controllers[name] and tracker.controllers[name][:files]
322
- path = tracker.controllers[name][:files].first
329
+ if tracker.controllers[name]
330
+ path = tracker.controllers[name].file
323
331
  else
324
332
  path += "/app/controllers/#{underscore(string_name)}.rb"
325
333
  end
326
334
  when :model
327
- if tracker.models[name] and tracker.models[name][:files]
328
- path = tracker.models[name][:files].first
335
+ if tracker.models[name]
336
+ path = tracker.models[name].file
329
337
  else
330
338
  path += "/app/models/#{underscore(string_name)}.rb"
331
339
  end
332
340
  when :template
333
- if tracker.templates[name] and tracker.templates[name][:file]
334
- path = tracker.templates[name][:file]
341
+ if tracker.templates[name] and tracker.templates[name].file
342
+ path = tracker.templates[name].file
335
343
  elsif string_name.include? " "
336
344
  name = string_name.split[0].to_sym
337
345
  path = file_for tracker, name, :template
@@ -1,3 +1,3 @@
1
1
  module Brakeman
2
- Version = "3.0.5"
2
+ Version = "3.1.0"
3
3
  end
@@ -62,7 +62,7 @@ class Brakeman::Warning
62
62
  @warning_set = :model
63
63
  elsif self.template
64
64
  @warning_set = :template
65
- @called_from = self.template[:caller]
65
+ @called_from = self.template.render_path
66
66
  elsif self.controller
67
67
  @warning_set = :controller
68
68
  else
@@ -89,12 +89,11 @@ class Brakeman::Warning
89
89
  end
90
90
 
91
91
  #Returns name of a view, including where it was rendered from
92
- def view_name
93
- return @view_name if @view_name
94
- if called_from
95
- @view_name = "#{template[:name]} (#{called_from.last})"
92
+ def view_name(include_renderer = true)
93
+ if called_from and include_renderer
94
+ @view_name = "#{template.name} (#{called_from.last})"
96
95
  else
97
- @view_name = template[:name]
96
+ @view_name = template.name
98
97
  end
99
98
  end
100
99
 
@@ -183,10 +182,10 @@ class Brakeman::Warning
183
182
  Digest::SHA2.new(256).update("#{warning_code_string}#{code_string}#{location_string}#{@relative_path}#{self.confidence}").to_s
184
183
  end
185
184
 
186
- def location
185
+ def location include_renderer = true
187
186
  case @warning_set
188
187
  when :template
189
- location = { :type => :template, :template => self.view_name }
188
+ location = { :type => :template, :template => self.view_name(include_renderer) }
190
189
  when :model
191
190
  location = { :type => :model, :model => self.model }
192
191
  when :controller
@@ -210,7 +209,7 @@ class Brakeman::Warning
210
209
  :link => self.link,
211
210
  :code => (@code && self.format_code(false)),
212
211
  :render_path => self.called_from,
213
- :location => self.location,
212
+ :location => self.location(false),
214
213
  :user_input => (@user_input && self.format_user_input(false)),
215
214
  :confidence => TEXT_CONFIDENCE[self.confidence]
216
215
  }
@@ -357,7 +357,7 @@ class Sexp
357
357
  # s(:lasgn, :y),
358
358
  # s(:block, s(:lvar, :y), s(:call, nil, :z, s(:arglist))))
359
359
  def block_call
360
- expect :iter, :call_with_block
360
+ expect :iter
361
361
  self[1]
362
362
  end
363
363
 
@@ -374,10 +374,10 @@ class Sexp
374
374
  return find_node :block, delete
375
375
  end
376
376
 
377
- expect :iter, :call_with_block, :scope, :resbody
377
+ expect :iter, :scope, :resbody
378
378
 
379
379
  case self.node_type
380
- when :iter, :call_with_block
380
+ when :iter
381
381
  self[3]
382
382
  when :scope
383
383
  self[1]
@@ -394,7 +394,7 @@ class Sexp
394
394
  # s(:lasgn, :y), <- block_args
395
395
  # s(:call, nil, :p, s(:arglist, s(:lvar, :y))))
396
396
  def block_args
397
- expect :iter, :call_with_block
397
+ expect :iter
398
398
  if self[2] == 0 # ?! See https://github.com/presidentbeef/brakeman/issues/331
399
399
  return Sexp.new(:args)
400
400
  else
@@ -451,23 +451,23 @@ class Sexp
451
451
 
452
452
  #Returns name of method being defined in a method definition.
453
453
  def method_name
454
- expect :defn, :defs, :methdef, :selfdef
454
+ expect :defn, :defs
455
455
 
456
456
  case self.node_type
457
- when :defn, :methdef
457
+ when :defn
458
458
  self[1]
459
- when :defs, :selfdef
459
+ when :defs
460
460
  self[2]
461
461
  end
462
462
  end
463
463
 
464
464
  def formal_args
465
- expect :defn, :defs, :methdef, :selfdef
465
+ expect :defn, :defs
466
466
 
467
467
  case self.node_type
468
- when :defn, :methdef
468
+ when :defn
469
469
  self[2]
470
- when :defs, :selfdef
470
+ when :defs
471
471
  self[3]
472
472
  end
473
473
  end
@@ -475,13 +475,13 @@ class Sexp
475
475
  #Sets body, which is now a complicated process because the body is no longer
476
476
  #a separate Sexp, but just a list of Sexps.
477
477
  def body= exp
478
- expect :defn, :defs, :methdef, :selfdef, :class, :module
478
+ expect :defn, :defs, :class, :module
479
479
  @my_hash_value = nil
480
480
 
481
481
  case self.node_type
482
- when :defn, :methdef, :class
482
+ when :defn, :class
483
483
  index = 3
484
- when :defs, :selfdef
484
+ when :defs
485
485
  index = 4
486
486
  when :module
487
487
  index = 2
@@ -499,12 +499,12 @@ class Sexp
499
499
  #Returns body of a method definition, class, or module.
500
500
  #This will be an untyped Sexp containing a list of Sexps from the body.
501
501
  def body
502
- expect :defn, :defs, :methdef, :selfdef, :class, :module
502
+ expect :defn, :defs, :class, :module
503
503
 
504
504
  case self.node_type
505
- when :defn, :methdef, :class
505
+ when :defn, :class
506
506
  self[3..-1]
507
- when :defs, :selfdef
507
+ when :defs
508
508
  self[4..-1]
509
509
  when :module
510
510
  self[2..-1]
@@ -72,14 +72,7 @@ class Brakeman::SexpProcessor
72
72
  # now do a pass with the real processor (or generic)
73
73
  meth = @processors[type]
74
74
  if meth then
75
- if $DEBUG
76
- result = error_handler(type) do
77
- self.send(meth, exp)
78
- end
79
- else
80
- result = self.send(meth, exp)
81
- end
82
-
75
+ result = self.send(meth, exp)
83
76
  else
84
77
  result = self.process_default(exp)
85
78
  end
@@ -90,36 +83,6 @@ class Brakeman::SexpProcessor
90
83
  result
91
84
  end
92
85
 
93
- def error_handler(type, exp=nil) # :nodoc:
94
- begin
95
- return yield
96
- rescue => err
97
- warn "#{err.class} Exception thrown while processing #{type} for sexp #{exp.inspect} #{caller.inspect}" if $DEBUG
98
- raise
99
- end
100
- end
101
-
102
- ##
103
- # A fairly generic processor for a dummy node. Dummy nodes are used
104
- # when your processor is doing a complicated rewrite that replaces
105
- # the current sexp with multiple sexps.
106
- #
107
- # Bogus Example:
108
- #
109
- # def process_something(exp)
110
- # return s(:dummy, process(exp), s(:extra, 42))
111
- # end
112
-
113
- def process_dummy(exp)
114
- result = @expected.new(:dummy) rescue @expected.new
115
-
116
- until exp.empty? do
117
- result << self.process(exp.shift)
118
- end
119
-
120
- result
121
- end
122
-
123
86
  ##
124
87
  # Add a scope level to the current env. Eg:
125
88
  #
@@ -150,86 +113,4 @@ class Brakeman::SexpProcessor
150
113
 
151
114
  self.context.shift
152
115
  end
153
-
154
- ##
155
- # I really hate this here, but I hate subdirs in my lib dir more...
156
- # I guess it is kinda like shaving... I'll split this out when it
157
- # itches too much...
158
-
159
- class Environment
160
- def initialize
161
- @env = []
162
- @env.unshift({})
163
- end
164
-
165
- def all
166
- @env.reverse.inject { |env, scope| env.merge scope }
167
- end
168
-
169
- def depth
170
- @env.length
171
- end
172
-
173
- # TODO: depth_of
174
-
175
- def [] name
176
- hash = @env.find { |closure| closure.has_key? name }
177
- hash[name] if hash
178
- end
179
-
180
- def []= name, val
181
- hash = @env.find { |closure| closure.has_key? name } || @env.first
182
- hash[name] = val
183
- end
184
-
185
- def scope
186
- @env.unshift({})
187
- begin
188
- yield
189
- ensure
190
- @env.shift
191
- raise "You went too far unextending env" if @env.empty?
192
- end
193
- end
194
- end
195
116
  end
196
-
197
- class Object
198
-
199
- ##
200
- # deep_clone is the usual Marshalling hack to make a deep copy.
201
- # It is rather slow, so use it sparingly. Helps with debugging
202
- # SexpProcessors since you usually shift off sexps.
203
-
204
- def deep_clone
205
- Marshal.load(Marshal.dump(self))
206
- end
207
- end
208
-
209
- ##
210
- # SexpProcessor base exception class.
211
-
212
- class SexpProcessorError < StandardError; end
213
-
214
- ##
215
- # Raised by SexpProcessor if it sees a node type listed in its
216
- # unsupported list.
217
-
218
- class UnsupportedNodeError < SexpProcessorError; end
219
-
220
- ##
221
- # Raised by SexpProcessor if it is in strict mode and sees a node for
222
- # which there is no processor available.
223
-
224
- class UnknownNodeError < SexpProcessorError; end
225
-
226
- ##
227
- # Raised by SexpProcessor if a processor did not process every node in
228
- # a sexp and @require_empty is true.
229
-
230
- class NotEmptyError < SexpProcessorError; end
231
-
232
- ##
233
- # Raised if assert_type encounters an unexpected sexp type.
234
-
235
- class SexpTypeError < SexpProcessorError; end
metadata CHANGED
@@ -1,36 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brakeman
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.5
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Collins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDijCCAnKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQ8wDQYDVQQDDAZqdXN0
14
- aW4xHTAbBgoJkiaJk/IsZAEZFg1wcmVzaWRlbnRiZWVmMRMwEQYKCZImiZPyLGQB
15
- GRYDY29tMB4XDTE1MDEwMzAxMjI0NFoXDTE2MDEwMzAxMjI0NFowRTEPMA0GA1UE
16
- AwwGanVzdGluMR0wGwYKCZImiZPyLGQBGRYNcHJlc2lkZW50YmVlZjETMBEGCgmS
17
- JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMjt
18
- xjn8ArkEqQNrRjEeyZAOyr0O8+WZ54AcObsKg2osrcAW6iFd7tjnTFclQHmZgje+
19
- cwxeF/YG4PbA72ElmCvjn8vQJkdgHspKds1otSozvTF2VDnyAEg0nDTMgkQGQy4R
20
- HX3NHXMJ8UCAJv2IV/FsItzcPzPmhhf6vu/QaNrmAm3/nF52EsMSEJNC9eTPWudC
21
- kPgt19T9LRKMk5YbXDM6jWGRubusE03bTwY3RThqYM5ra1DwI/HpWKsKdmNrBbse
22
- f065WyR7RNAxindc2wMyq1EaInmO7Vds+rsOFZ4ZnO90z046ywmTLTadqlfuc9Qo
23
- CEw/AhYB6f6DLH8ICkMCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
24
- sDAdBgNVHQ4EFgQUmIuIvxLr7ziB52LOpVgd694EfaEwIwYDVR0RBBwwGoEYanVz
25
- dGluQHByZXNpZGVudGJlZWYuY29tMCMGA1UdEgQcMBqBGGp1c3RpbkBwcmVzaWRl
26
- bnRiZWVmLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAbgSKdn/VSDdl5H2ayE+OM662
27
- gTJWP1CWfbcRVJW/UDjDucEF42t6V/dZTDmwyYTR8Qv+5FsQoPHsDsD3Jr1E62dl
28
- VYDeUkbmiV5f8fANbvnGUknzrHwp2T0/URxiIY8oFcaCGT+iua9zlNU20+XhB9JN
29
- fsOSUNBuuE/MYGA37MR1sP7lFHr5e7I1Qk1x3HvjNB/kSv1+Cj26Lde1ehvMqpmi
30
- bxoxp9KNxkO+709YwLO1rYfmcGghg8WV6MYz3PSHdlgWF4KrjRFc/00hXHqVk0Sf
31
- mREEv2LPwHH2SgpSSab+iawnX4l6lV8XcIrmp/HSMySsPVFBeOmB0c05LpEN8w==
32
- -----END CERTIFICATE-----
33
- date: 2015-06-20 00:00:00.000000000 Z
11
+ - brakeman-public_cert.pem
12
+ date: 2015-08-31 00:00:00.000000000 Z
34
13
  dependencies:
35
14
  - !ruby/object:Gem::Dependency
36
15
  name: test-unit
@@ -64,30 +43,36 @@ dependencies:
64
43
  name: ruby2ruby
65
44
  requirement: !ruby/object:Gem::Requirement
66
45
  requirements:
67
- - - "~>"
46
+ - - ">="
68
47
  - !ruby/object:Gem::Version
69
48
  version: 2.1.1
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: 2.3.0
70
52
  type: :runtime
71
53
  prerelease: false
72
54
  version_requirements: !ruby/object:Gem::Requirement
73
55
  requirements:
74
- - - "~>"
56
+ - - ">="
75
57
  - !ruby/object:Gem::Version
76
58
  version: 2.1.1
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: 2.3.0
77
62
  - !ruby/object:Gem::Dependency
78
63
  name: terminal-table
79
64
  requirement: !ruby/object:Gem::Requirement
80
65
  requirements:
81
66
  - - "~>"
82
67
  - !ruby/object:Gem::Version
83
- version: '1.4'
68
+ version: 1.4.5
84
69
  type: :runtime
85
70
  prerelease: false
86
71
  version_requirements: !ruby/object:Gem::Requirement
87
72
  requirements:
88
73
  - - "~>"
89
74
  - !ruby/object:Gem::Version
90
- version: '1.4'
75
+ version: 1.4.5
91
76
  - !ruby/object:Gem::Dependency
92
77
  name: fastercsv
93
78
  requirement: !ruby/object:Gem::Requirement
@@ -108,14 +93,14 @@ dependencies:
108
93
  requirements:
109
94
  - - "~>"
110
95
  - !ruby/object:Gem::Version
111
- version: 1.6.20
96
+ version: '1.6'
112
97
  type: :runtime
113
98
  prerelease: false
114
99
  version_requirements: !ruby/object:Gem::Requirement
115
100
  requirements:
116
101
  - - "~>"
117
102
  - !ruby/object:Gem::Version
118
- version: 1.6.20
103
+ version: '1.6'
119
104
  - !ruby/object:Gem::Dependency
120
105
  name: erubis
121
106
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +149,26 @@ dependencies:
164
149
  - - "~>"
165
150
  - !ruby/object:Gem::Version
166
151
  version: '3.0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: slim
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: 1.3.6
159
+ - - "<"
160
+ - !ruby/object:Gem::Version
161
+ version: '4.0'
162
+ type: :runtime
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: 1.3.6
169
+ - - "<"
170
+ - !ruby/object:Gem::Version
171
+ version: '4.0'
167
172
  - !ruby/object:Gem::Dependency
168
173
  name: multi_json
169
174
  requirement: !ruby/object:Gem::Requirement
@@ -321,6 +326,12 @@ files:
321
326
  - lib/brakeman/rescanner.rb
322
327
  - lib/brakeman/scanner.rb
323
328
  - lib/brakeman/tracker.rb
329
+ - lib/brakeman/tracker/collection.rb
330
+ - lib/brakeman/tracker/config.rb
331
+ - lib/brakeman/tracker/controller.rb
332
+ - lib/brakeman/tracker/library.rb
333
+ - lib/brakeman/tracker/model.rb
334
+ - lib/brakeman/tracker/template.rb
324
335
  - lib/brakeman/util.rb
325
336
  - lib/brakeman/version.rb
326
337
  - lib/brakeman/warning.rb
@@ -347,7 +358,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
347
358
  version: '0'
348
359
  requirements: []
349
360
  rubyforge_project:
350
- rubygems_version: 2.4.5
361
+ rubygems_version: 2.4.8
351
362
  signing_key:
352
363
  specification_version: 4
353
364
  summary: Security vulnerability scanner for Ruby on Rails.