brakeman 5.0.1 → 5.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +4 -0
  3. data/bundle/load.rb +3 -2
  4. data/bundle/ruby/2.7.0/gems/parallel-1.20.1/MIT-LICENSE.txt +20 -0
  5. data/bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel.rb +523 -0
  6. data/bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb +42 -0
  7. data/bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/version.rb +3 -0
  8. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/History.rdoc +19 -0
  9. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/Manifest.txt +2 -0
  10. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/README.rdoc +0 -0
  11. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/compare/normalize.rb +2 -2
  12. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/debugging.md +0 -0
  13. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/rp_extensions.rb +0 -0
  14. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/rp_stringscanner.rb +0 -0
  15. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby20_parser.rb +273 -278
  16. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby20_parser.y +0 -3
  17. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby21_parser.rb +286 -291
  18. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby21_parser.y +0 -3
  19. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby22_parser.rb +292 -297
  20. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby22_parser.y +0 -3
  21. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby23_parser.rb +290 -295
  22. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby23_parser.y +0 -3
  23. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby24_parser.rb +291 -296
  24. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby24_parser.y +0 -3
  25. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby25_parser.rb +292 -297
  26. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby25_parser.y +0 -3
  27. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby26_parser.rb +296 -301
  28. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby26_parser.y +0 -3
  29. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby27_parser.rb +2480 -2528
  30. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby27_parser.y +0 -26
  31. data/bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby30_parser.rb +7310 -0
  32. data/bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby30_parser.y +2677 -0
  33. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby_lexer.rb +0 -0
  34. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby_lexer.rex +0 -0
  35. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby_lexer.rex.rb +0 -0
  36. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby_parser.rb +2 -0
  37. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby_parser.yy +2 -30
  38. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/lib/ruby_parser_extras.rb +2 -2
  39. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/tools/munge.rb +0 -0
  40. data/bundle/ruby/2.7.0/gems/{ruby_parser-3.15.1 → ruby_parser-3.16.0}/tools/ripper.rb +1 -1
  41. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/History.rdoc +6 -0
  42. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/Manifest.txt +0 -0
  43. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/README.rdoc +0 -0
  44. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/lib/composite_sexp_processor.rb +0 -0
  45. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/lib/pt_testcase.rb +2 -2
  46. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/lib/sexp.rb +0 -0
  47. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/lib/sexp_matcher.rb +0 -0
  48. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/lib/sexp_processor.rb +1 -1
  49. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/lib/strict_sexp.rb +0 -0
  50. data/bundle/ruby/2.7.0/gems/{sexp_processor-4.15.2 → sexp_processor-4.15.3}/lib/unique.rb +0 -0
  51. data/lib/brakeman.rb +4 -0
  52. data/lib/brakeman/checks/check_detailed_exceptions.rb +1 -1
  53. data/lib/brakeman/checks/check_evaluation.rb +1 -1
  54. data/lib/brakeman/checks/check_sanitize_methods.rb +2 -1
  55. data/lib/brakeman/checks/check_sql.rb +15 -2
  56. data/lib/brakeman/checks/check_verb_confusion.rb +1 -1
  57. data/lib/brakeman/file_parser.rb +36 -14
  58. data/lib/brakeman/options.rb +1 -1
  59. data/lib/brakeman/processors/alias_processor.rb +52 -7
  60. data/lib/brakeman/processors/controller_alias_processor.rb +6 -43
  61. data/lib/brakeman/processors/lib/call_conversion_helper.rb +10 -0
  62. data/lib/brakeman/processors/library_processor.rb +9 -0
  63. data/lib/brakeman/report.rb +4 -1
  64. data/lib/brakeman/report/ignore/interactive.rb +1 -1
  65. data/lib/brakeman/report/report_github.rb +31 -0
  66. data/lib/brakeman/scanner.rb +3 -0
  67. data/lib/brakeman/tracker.rb +33 -4
  68. data/lib/brakeman/tracker/collection.rb +27 -5
  69. data/lib/brakeman/tracker/method_info.rb +29 -0
  70. data/lib/brakeman/util.rb +8 -0
  71. data/lib/brakeman/version.rb +1 -1
  72. metadata +51 -43
@@ -51,7 +51,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
51
51
  #Need to process the method like it was in a controller in order
52
52
  #to get the renders set
53
53
  processor = Brakeman::ControllerProcessor.new(@tracker, mixin.file)
54
- method = mixin.get_method(name)[:src].deep_clone
54
+ method = mixin.get_method(name).src.deep_clone
55
55
 
56
56
  if node_type? method, :defn
57
57
  method = processor.process_defn method
@@ -143,16 +143,16 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
143
143
  #Basically, adds any instance variable assignments to the environment.
144
144
  #TODO: method arguments?
145
145
  def process_before_filter name
146
- filter = find_method name, @current_class
146
+ filter = tracker.find_method name, @current_class
147
147
 
148
148
  if filter.nil?
149
149
  Brakeman.debug "[Notice] Could not find filter #{name}"
150
150
  return
151
151
  end
152
152
 
153
- method = filter[:method]
153
+ method = filter.src
154
154
 
155
- if ivars = @tracker.filter_cache[[filter[:controller], name]]
155
+ if ivars = @tracker.filter_cache[[filter.owner, name]]
156
156
  ivars.each do |variable, value|
157
157
  env[variable] = value
158
158
  end
@@ -162,7 +162,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
162
162
 
163
163
  ivars = processor.only_ivars(:include_request_vars).all
164
164
 
165
- @tracker.filter_cache[[filter[:controller], name]] = ivars
165
+ @tracker.filter_cache[[filter.owner, name]] = ivars
166
166
 
167
167
  ivars.each do |variable, value|
168
168
  env[variable] = value
@@ -182,7 +182,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
182
182
  # method as the line number
183
183
  if line.nil? and controller = @tracker.controllers[@current_class]
184
184
  if meth = controller.get_method(@current_method)
185
- if line = meth[:src] && meth[:src].last && meth[:src].last.line
185
+ if line = meth.src && meth.src.last && meth.src.last.line
186
186
  line += 1
187
187
  else
188
188
  line = 1
@@ -241,41 +241,4 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
241
241
  []
242
242
  end
243
243
  end
244
-
245
- #Finds a method in the given class or a parent class
246
- #
247
- #Returns nil if the method could not be found.
248
- #
249
- #If found, returns hash table with controller name and method sexp.
250
- def find_method method_name, klass
251
- return nil if sexp? method_name
252
- method_name = method_name.to_sym
253
-
254
- if method = @method_cache[method_name]
255
- return method
256
- end
257
-
258
- controller = @tracker.controllers[klass]
259
- controller ||= @tracker.libs[klass]
260
-
261
- if klass and controller
262
- method = controller.get_method method_name
263
-
264
- if method.nil?
265
- controller.includes.each do |included|
266
- method = find_method method_name, included
267
- if method
268
- @method_cache[method_name] = method
269
- return method
270
- end
271
- end
272
-
273
- @method_cache[method_name] = find_method method_name, controller.parent
274
- else
275
- @method_cache[method_name] = { :controller => controller.name, :method => method[:src] }
276
- end
277
- else
278
- nil
279
- end
280
- end
281
244
  end
@@ -76,6 +76,8 @@ module Brakeman
76
76
 
77
77
  #Have to do this because first element is :array and we have to skip it
78
78
  array[1..-1][index] or original_exp
79
+ elsif all_literals? array
80
+ safe_literal(array.line)
79
81
  else
80
82
  original_exp
81
83
  end
@@ -92,5 +94,13 @@ module Brakeman
92
94
  original_exp
93
95
  end
94
96
  end
97
+
98
+ def hash_values_at hash, keys
99
+ values = keys.map do |key|
100
+ process_hash_access hash, key
101
+ end
102
+
103
+ Sexp.new(:array).concat(values).line(hash.line)
104
+ end
95
105
  end
96
106
  end
@@ -54,6 +54,15 @@ class Brakeman::LibraryProcessor < Brakeman::BaseProcessor
54
54
 
55
55
  def process_call exp
56
56
  if process_call_defn? exp
57
+ exp
58
+ elsif @current_method.nil? and exp.target.nil? and (@current_class or @current_module)
59
+ # Methods called inside class / module
60
+ case exp.method
61
+ when :include
62
+ module_name = class_name(exp.first_arg)
63
+ (@current_class || @current_module).add_include module_name
64
+ end
65
+
57
66
  exp
58
67
  else
59
68
  process_default exp
@@ -6,7 +6,7 @@ require 'brakeman/report/report_base'
6
6
  class Brakeman::Report
7
7
  attr_reader :tracker
8
8
 
9
- VALID_FORMATS = [:to_html, :to_pdf, :to_csv, :to_json, :to_tabs, :to_hash, :to_s, :to_markdown, :to_codeclimate, :to_plain, :to_text, :to_junit]
9
+ VALID_FORMATS = [:to_html, :to_pdf, :to_csv, :to_json, :to_tabs, :to_hash, :to_s, :to_markdown, :to_codeclimate, :to_plain, :to_text, :to_junit, :to_github]
10
10
 
11
11
  def initialize tracker
12
12
  @app_tree = tracker.app_tree
@@ -48,6 +48,9 @@ class Brakeman::Report
48
48
  when :to_sonar
49
49
  require_report 'sonar'
50
50
  Brakeman::Report::Sonar
51
+ when :to_github
52
+ require_report 'github'
53
+ Brakeman::Report::Github
51
54
  else
52
55
  raise "Invalid format: #{format}. Should be one of #{VALID_FORMATS.inspect}"
53
56
  end
@@ -62,7 +62,7 @@ module Brakeman
62
62
  process_warnings
63
63
  end
64
64
 
65
- m.choice "Hide previously ignored warnings" do
65
+ m.choice "Inspect new warnings" do
66
66
  @skip_ignored = true
67
67
  pre_show_help
68
68
  process_warnings
@@ -0,0 +1,31 @@
1
+ # Github Actions Formatter
2
+ # Formats warnings as workflow commands to create annotations in GitHub UI
3
+ class Brakeman::Report::Github < Brakeman::Report::Base
4
+ def generate_report
5
+ # @see https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-a-warning-message
6
+ errors.concat(warnings).join("\n")
7
+ end
8
+
9
+ def warnings
10
+ all_warnings
11
+ .map { |warning| "::warning file=#{warning_file(warning)},line=#{warning.line}::#{warning.message}" }
12
+ end
13
+
14
+ def errors
15
+ tracker.errors.map do |error|
16
+ if error[:exception].is_a?(Racc::ParseError)
17
+ # app/services/balance.rb:4 :: parse error on value "..." (tDOT3)
18
+ file, line = error[:exception].message.split(':').map(&:strip)[0,2]
19
+ "::error file=#{file},line=#{line}::#{clean_message(error[:error])}"
20
+ else
21
+ "::error ::#{clean_message(error[:error])}"
22
+ end
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def clean_message(msg)
29
+ msg.gsub('::','').squeeze(' ')
30
+ end
31
+ end
@@ -353,6 +353,9 @@ class Brakeman::Scanner
353
353
  def parse_ruby_file file
354
354
  fp = Brakeman::FileParser.new(tracker.app_tree, tracker.options[:parser_timeout])
355
355
  fp.parse_ruby(file.read, file)
356
+ rescue Exception => e
357
+ tracker.error(e)
358
+ nil
356
359
  end
357
360
  end
358
361
 
@@ -35,6 +35,7 @@ class Brakeman::Tracker
35
35
  #class they are.
36
36
  @models = {}
37
37
  @models[UNKNOWN_MODEL] = Brakeman::Model.new(UNKNOWN_MODEL, nil, @app_tree.file_path("NOT_REAL.rb"), nil, self)
38
+ @method_cache = {}
38
39
  @routes = {}
39
40
  @initializers = {}
40
41
  @errors = []
@@ -99,8 +100,8 @@ class Brakeman::Tracker
99
100
  classes.each do |set|
100
101
  set.each do |set_name, collection|
101
102
  collection.each_method do |method_name, definition|
102
- src = definition[:src]
103
- yield src, set_name, method_name, definition[:file]
103
+ src = definition.src
104
+ yield src, set_name, method_name, definition.file
104
105
  end
105
106
  end
106
107
  end
@@ -220,6 +221,34 @@ class Brakeman::Tracker
220
221
  nil
221
222
  end
222
223
 
224
+ def find_method method_name, class_name, method_type = :instance
225
+ return nil unless method_name.is_a? Symbol
226
+
227
+ klass = find_class(class_name)
228
+ return nil unless klass
229
+
230
+ cache_key = [klass, method_name, method_type]
231
+
232
+ if method = @method_cache[cache_key]
233
+ return method
234
+ end
235
+
236
+ if method = klass.get_method(method_name, method_type)
237
+ return method
238
+ else
239
+ # Check modules included for method definition
240
+ # TODO: only for instance methods, otherwise check extends!
241
+ klass.includes.each do |included_name|
242
+ if method = find_method(method_name, included_name, method_type)
243
+ return (@method_cache[cache_key] = method)
244
+ end
245
+ end
246
+
247
+ # Not in any included modules, check the parent
248
+ @method_cache[cache_key] = find_method(method_name, klass.parent)
249
+ end
250
+ end
251
+
223
252
  def index_call_sites
224
253
  finder = Brakeman::FindAllCalls.new self
225
254
 
@@ -285,8 +314,8 @@ class Brakeman::Tracker
285
314
  method_sets.each do |set|
286
315
  set.each do |set_name, info|
287
316
  info.each_method do |method_name, definition|
288
- src = definition[:src]
289
- finder.process_source src, :class => set_name, :method => method_name, :file => definition[:file]
317
+ src = definition.src
318
+ finder.process_source src, :class => set_name, :method => method_name, :file => definition.file
290
319
  end
291
320
  end
292
321
  end
@@ -1,4 +1,5 @@
1
1
  require 'brakeman/util'
2
+ require 'brakeman/tracker/method_info'
2
3
 
3
4
  module Brakeman
4
5
  class Collection
@@ -13,6 +14,7 @@ module Brakeman
13
14
  @src = {}
14
15
  @includes = []
15
16
  @methods = { :public => {}, :private => {}, :protected => {} }
17
+ @class_methods = {}
16
18
  @options = {}
17
19
  @tracker = tracker
18
20
 
@@ -46,11 +48,16 @@ module Brakeman
46
48
  end
47
49
 
48
50
  def add_method visibility, name, src, file_name
51
+ meth_info = Brakeman::MethodInfo.new(name, src, self, file_name)
52
+
49
53
  if src.node_type == :defs
54
+ @class_methods[name] = meth_info
55
+
56
+ # TODO fix this weirdness
50
57
  name = :"#{src[1]}.#{name}"
51
58
  end
52
59
 
53
- @methods[visibility][name] = { :src => src, :file => file_name }
60
+ @methods[visibility][name] = meth_info
54
61
  end
55
62
 
56
63
  def each_method
@@ -61,16 +68,31 @@ module Brakeman
61
68
  end
62
69
  end
63
70
 
64
- def get_method name
65
- each_method do |n, info|
66
- if n == name
67
- return info
71
+ def get_method name, type = :instance
72
+ case type
73
+ when :class
74
+ get_class_method name
75
+ when :instance
76
+ get_instance_method name
77
+ else
78
+ raise "Unexpected method type: #{type.inspect}"
79
+ end
80
+ end
81
+
82
+ def get_instance_method name
83
+ @methods.each do |_vis, meths|
84
+ if meths[name]
85
+ return meths[name]
68
86
  end
69
87
  end
70
88
 
71
89
  nil
72
90
  end
73
91
 
92
+ def get_class_method name
93
+ @class_methods[name]
94
+ end
95
+
74
96
  def file
75
97
  @files.first
76
98
  end
@@ -0,0 +1,29 @@
1
+ require 'brakeman/util'
2
+
3
+ module Brakeman
4
+ class MethodInfo
5
+ include Brakeman::Util
6
+
7
+ attr_reader :name, :src, :owner, :file, :type
8
+
9
+ def initialize name, src, owner, file
10
+ @name = name
11
+ @src = src
12
+ @owner = owner
13
+ @file = file
14
+ @type = case src.node_type
15
+ when :defn
16
+ :instance
17
+ when :defs
18
+ :class
19
+ else
20
+ raise "Expected sexp type: #{src.node_type}"
21
+ end
22
+ end
23
+
24
+ # To support legacy code that expected a Hash
25
+ def [] attr
26
+ self.send(attr)
27
+ end
28
+ end
29
+ end
data/lib/brakeman/util.rb CHANGED
@@ -142,6 +142,14 @@ module Brakeman::Util
142
142
  nil
143
143
  end
144
144
 
145
+ def hash_values hash
146
+ values = hash.each_sexp.each_slice(2).map do |_, value|
147
+ value
148
+ end
149
+
150
+ Sexp.new(:array).concat(values).line(hash.line)
151
+ end
152
+
145
153
  #These are never modified
146
154
  PARAMS_SEXP = Sexp.new(:params)
147
155
  SESSION_SEXP = Sexp.new(:session)
@@ -1,3 +1,3 @@
1
1
  module Brakeman
2
- Version = "5.0.1"
2
+ Version = "5.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brakeman
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Collins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-28 00:00:00.000000000 Z
11
+ date: 2021-06-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Brakeman detects security vulnerabilities in Ruby on Rails applications
14
14
  via static analysis.
@@ -132,6 +132,10 @@ files:
132
132
  - bundle/ruby/2.7.0/gems/highline-2.0.3/lib/highline/terminal/unix_stty.rb
133
133
  - bundle/ruby/2.7.0/gems/highline-2.0.3/lib/highline/version.rb
134
134
  - bundle/ruby/2.7.0/gems/highline-2.0.3/lib/highline/wrapper.rb
135
+ - bundle/ruby/2.7.0/gems/parallel-1.20.1/MIT-LICENSE.txt
136
+ - bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel.rb
137
+ - bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
138
+ - bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/version.rb
135
139
  - bundle/ruby/2.7.0/gems/rexml-3.2.5/LICENSE.txt
136
140
  - bundle/ruby/2.7.0/gems/rexml-3.2.5/NEWS.md
137
141
  - bundle/ruby/2.7.0/gems/rexml-3.2.5/README.md
@@ -189,37 +193,39 @@ files:
189
193
  - bundle/ruby/2.7.0/gems/ruby2ruby-2.4.4/Manifest.txt
190
194
  - bundle/ruby/2.7.0/gems/ruby2ruby-2.4.4/README.rdoc
191
195
  - bundle/ruby/2.7.0/gems/ruby2ruby-2.4.4/lib/ruby2ruby.rb
192
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/History.rdoc
193
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/Manifest.txt
194
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/README.rdoc
195
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/compare/normalize.rb
196
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/debugging.md
197
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/rp_extensions.rb
198
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/rp_stringscanner.rb
199
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby20_parser.rb
200
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby20_parser.y
201
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby21_parser.rb
202
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby21_parser.y
203
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby22_parser.rb
204
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby22_parser.y
205
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby23_parser.rb
206
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby23_parser.y
207
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby24_parser.rb
208
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby24_parser.y
209
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby25_parser.rb
210
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby25_parser.y
211
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby26_parser.rb
212
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby26_parser.y
213
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby27_parser.rb
214
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby27_parser.y
215
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby_lexer.rb
216
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby_lexer.rex
217
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby_lexer.rex.rb
218
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby_parser.rb
219
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby_parser.yy
220
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/lib/ruby_parser_extras.rb
221
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/tools/munge.rb
222
- - bundle/ruby/2.7.0/gems/ruby_parser-3.15.1/tools/ripper.rb
196
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/History.rdoc
197
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/Manifest.txt
198
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/README.rdoc
199
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/compare/normalize.rb
200
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/debugging.md
201
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/rp_extensions.rb
202
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/rp_stringscanner.rb
203
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby20_parser.rb
204
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby20_parser.y
205
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby21_parser.rb
206
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby21_parser.y
207
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby22_parser.rb
208
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby22_parser.y
209
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby23_parser.rb
210
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby23_parser.y
211
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby24_parser.rb
212
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby24_parser.y
213
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby25_parser.rb
214
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby25_parser.y
215
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby26_parser.rb
216
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby26_parser.y
217
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby27_parser.rb
218
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby27_parser.y
219
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby30_parser.rb
220
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby30_parser.y
221
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby_lexer.rb
222
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby_lexer.rex
223
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby_lexer.rex.rb
224
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby_parser.rb
225
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby_parser.yy
226
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/lib/ruby_parser_extras.rb
227
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/tools/munge.rb
228
+ - bundle/ruby/2.7.0/gems/ruby_parser-3.16.0/tools/ripper.rb
223
229
  - bundle/ruby/2.7.0/gems/ruby_parser-legacy-1.0.0/History.rdoc
224
230
  - bundle/ruby/2.7.0/gems/ruby_parser-legacy-1.0.0/Manifest.txt
225
231
  - bundle/ruby/2.7.0/gems/ruby_parser-legacy-1.0.0/README.rdoc
@@ -264,16 +270,16 @@ files:
264
270
  - bundle/ruby/2.7.0/gems/safe_yaml-1.0.5/lib/safe_yaml/version.rb
265
271
  - bundle/ruby/2.7.0/gems/safe_yaml-1.0.5/run_specs_all_ruby_versions.sh
266
272
  - bundle/ruby/2.7.0/gems/safe_yaml-1.0.5/safe_yaml.gemspec
267
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/History.rdoc
268
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/Manifest.txt
269
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/README.rdoc
270
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/lib/composite_sexp_processor.rb
271
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/lib/pt_testcase.rb
272
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/lib/sexp.rb
273
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/lib/sexp_matcher.rb
274
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/lib/sexp_processor.rb
275
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/lib/strict_sexp.rb
276
- - bundle/ruby/2.7.0/gems/sexp_processor-4.15.2/lib/unique.rb
273
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/History.rdoc
274
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/Manifest.txt
275
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/README.rdoc
276
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/lib/composite_sexp_processor.rb
277
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/lib/pt_testcase.rb
278
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/lib/sexp.rb
279
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/lib/sexp_matcher.rb
280
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/lib/sexp_processor.rb
281
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/lib/strict_sexp.rb
282
+ - bundle/ruby/2.7.0/gems/sexp_processor-4.15.3/lib/unique.rb
277
283
  - bundle/ruby/2.7.0/gems/slim-4.1.0/CHANGES
278
284
  - bundle/ruby/2.7.0/gems/slim-4.1.0/Gemfile
279
285
  - bundle/ruby/2.7.0/gems/slim-4.1.0/LICENSE
@@ -566,6 +572,7 @@ files:
566
572
  - lib/brakeman/report/report_base.rb
567
573
  - lib/brakeman/report/report_codeclimate.rb
568
574
  - lib/brakeman/report/report_csv.rb
575
+ - lib/brakeman/report/report_github.rb
569
576
  - lib/brakeman/report/report_hash.rb
570
577
  - lib/brakeman/report/report_html.rb
571
578
  - lib/brakeman/report/report_json.rb
@@ -595,6 +602,7 @@ files:
595
602
  - lib/brakeman/tracker/constants.rb
596
603
  - lib/brakeman/tracker/controller.rb
597
604
  - lib/brakeman/tracker/library.rb
605
+ - lib/brakeman/tracker/method_info.rb
598
606
  - lib/brakeman/tracker/model.rb
599
607
  - lib/brakeman/tracker/template.rb
600
608
  - lib/brakeman/util.rb