brakeman 7.1.2 → 8.0.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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +11 -0
  3. data/README.md +1 -1
  4. data/bundle/load.rb +2 -2
  5. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/CHANGELOG +111 -0
  6. data/bundle/ruby/3.2.0/gems/{erubis-2.7.0 → erubi-1.13.1}/MIT-LICENSE +1 -0
  7. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/README.rdoc +151 -0
  8. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_block.rb +91 -0
  9. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_end.rb +58 -0
  10. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi.rb +299 -0
  11. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/asciidoc.rb +12 -5
  12. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/babel.rb +5 -0
  13. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/builder.rb +4 -0
  14. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/coffee.rb +14 -4
  15. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/commonmarker.rb +41 -0
  16. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/csv.rb +63 -0
  17. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/erb.rb +130 -0
  18. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/erubi.rb +41 -8
  19. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/etanni.rb +7 -0
  20. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/haml.rb +67 -1
  21. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/kramdown.rb +59 -0
  22. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/liquid.rb +93 -0
  23. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/livescript.rb +11 -4
  24. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/mapping.rb +8 -8
  25. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/markaby.rb +11 -2
  26. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/nokogiri.rb +13 -2
  27. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/pandoc.rb +81 -0
  28. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/pipeline.rb +6 -1
  29. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/plain.rb +5 -1
  30. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/prawn.rb +17 -6
  31. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/radius.rb +96 -0
  32. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rdiscount.rb +82 -0
  33. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rdoc.rb +33 -0
  34. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/redcarpet.rb +73 -0
  35. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/redcloth.rb +40 -0
  36. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rst-pandoc.rb +33 -0
  37. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/sass.rb +16 -3
  38. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/slim.rb +18 -0
  39. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/string.rb +10 -2
  40. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/template.rb +5 -5
  41. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/typescript.rb +5 -0
  42. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/yajl.rb +91 -0
  43. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt.rb +1 -2
  44. data/lib/brakeman/app_tree.rb +7 -2
  45. data/lib/brakeman/checks/check_model_attributes.rb +1 -1
  46. data/lib/brakeman/checks/check_render.rb +1 -27
  47. data/lib/brakeman/checks/check_render_rce.rb +43 -0
  48. data/lib/brakeman/checks/check_session_settings.rb +1 -1
  49. data/lib/brakeman/checks.rb +31 -25
  50. data/lib/brakeman/commandline.rb +6 -1
  51. data/lib/brakeman/file_parser.rb +3 -2
  52. data/lib/brakeman/logger.rb +264 -0
  53. data/lib/brakeman/options.rb +0 -9
  54. data/lib/brakeman/parsers/rails_erubi.rb +82 -0
  55. data/lib/brakeman/parsers/template_parser.rb +7 -15
  56. data/lib/brakeman/processor.rb +2 -2
  57. data/lib/brakeman/processors/controller_alias_processor.rb +1 -1
  58. data/lib/brakeman/processors/controller_processor.rb +3 -3
  59. data/lib/brakeman/processors/{erubis_template_processor.rb → erubi_template_procesor.rb} +3 -3
  60. data/lib/brakeman/processors/lib/rails2_config_processor.rb +4 -3
  61. data/lib/brakeman/processors/lib/rails2_route_processor.rb +1 -1
  62. data/lib/brakeman/processors/lib/render_helper.rb +1 -1
  63. data/lib/brakeman/processors/lib/render_path.rb +1 -1
  64. data/lib/brakeman/processors/model_processor.rb +1 -1
  65. data/lib/brakeman/report/ignore/config.rb +1 -1
  66. data/lib/brakeman/scanner.rb +25 -49
  67. data/lib/brakeman/tracker/collection.rb +12 -2
  68. data/lib/brakeman/tracker/config.rb +17 -13
  69. data/lib/brakeman/tracker/constants.rb +17 -2
  70. data/lib/brakeman/tracker/controller.rb +1 -1
  71. data/lib/brakeman/tracker.rb +7 -15
  72. data/lib/brakeman/version.rb +1 -1
  73. data/lib/brakeman.rb +89 -49
  74. metadata +51 -80
  75. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/CHANGES.txt +0 -828
  76. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/README.txt +0 -102
  77. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis +0 -3468
  78. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis-run.rb +0 -132
  79. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/inline-require +0 -179
  80. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/context.rb +0 -83
  81. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/converter.rb +0 -357
  82. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ec.rb +0 -117
  83. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ecpp.rb +0 -113
  84. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejava.rb +0 -110
  85. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejavascript.rb +0 -119
  86. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/enhanced.rb +0 -126
  87. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eperl.rb +0 -95
  88. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ephp.rb +0 -99
  89. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb +0 -125
  90. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/escheme.rb +0 -114
  91. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/optimized.rb +0 -127
  92. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine.rb +0 -120
  93. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/enhancer.rb +0 -723
  94. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/error.rb +0 -23
  95. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/evaluator.rb +0 -88
  96. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/generator.rb +0 -85
  97. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helper.rb +0 -47
  98. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_form_helper.rb +0 -197
  99. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_helper.rb +0 -353
  100. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/local-setting.rb +0 -9
  101. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/main.rb +0 -516
  102. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/preprocessing.rb +0 -58
  103. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/tiny.rb +0 -144
  104. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/util.rb +0 -22
  105. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis.rb +0 -73
  106. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/setup.rb +0 -1331
  107. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/creole.rb +0 -16
  108. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/csv.rb +0 -53
  109. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/erb.rb +0 -65
  110. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/kramdown.rb +0 -13
  111. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/liquid.rb +0 -37
  112. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pandoc.rb +0 -39
  113. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/radius.rb +0 -41
  114. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdiscount.rb +0 -23
  115. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdoc.rb +0 -11
  116. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcarpet.rb +0 -31
  117. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcloth.rb +0 -13
  118. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rst-pandoc.rb +0 -10
  119. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/slim.rb +0 -5
  120. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/yajl.rb +0 -81
  121. data/lib/brakeman/parsers/erubis_patch.rb +0 -11
  122. data/lib/brakeman/parsers/rails2_erubis.rb +0 -9
  123. data/lib/brakeman/parsers/rails2_xss_plugin_erubis.rb +0 -52
  124. data/lib/brakeman/parsers/rails3_erubis.rb +0 -85
  125. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/COPYING +0 -0
  126. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_emacs_org.rb +0 -0
  127. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_handlebars.rb +0 -0
  128. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_jbuilder.rb +0 -0
  129. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_org.rb +0 -0
  130. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/cli.rb +0 -0
@@ -31,8 +31,6 @@ class Brakeman::Scanner
31
31
  end
32
32
 
33
33
  @processor = processor || Brakeman::Processor.new(@app_tree, options)
34
- @show_timing = tracker.options[:debug] || tracker.options[:show_timing]
35
- @per_file_timing = tracker.options[:debug] && tracker.options[:show_timing]
36
34
  end
37
35
 
38
36
  #Returns the Tracker generated from the scan
@@ -44,32 +42,12 @@ class Brakeman::Scanner
44
42
  tracker.file_cache
45
43
  end
46
44
 
47
- def process_step description
48
- Brakeman.notify "#{description}...".ljust(40)
49
-
50
- if @show_timing
51
- start_t = Time.now
52
- yield
53
- duration = Time.now - start_t
54
-
55
- Brakeman.notify "(#{description}) Duration: #{duration} seconds"
56
- else
57
- yield
58
- end
45
+ def process_step(description, &)
46
+ Brakeman.process_step(description, &)
59
47
  end
60
48
 
61
- def process_step_file description
62
- if @per_file_timing
63
- Brakeman.notify "Processing #{description}"
64
-
65
- start_t = Time.now
66
- yield
67
- duration = Time.now - start_t
68
-
69
- Brakeman.notify "(#{description}) Duration: #{duration} seconds"
70
- else
71
- yield
72
- end
49
+ def process_step_file(description, &)
50
+ Brakeman.logger.single_context(description, &)
73
51
  end
74
52
 
75
53
  #Process everything in the Rails application
@@ -111,7 +89,7 @@ class Brakeman::Scanner
111
89
  process_initializers
112
90
  end
113
91
 
114
- process_step 'Processing libs' do
92
+ process_step 'Processing libraries' do
115
93
  process_libs
116
94
  end
117
95
 
@@ -123,7 +101,7 @@ class Brakeman::Scanner
123
101
  process_templates
124
102
  end
125
103
 
126
- process_step 'Processing data flow in templates' do
104
+ process_step 'Processing data flow' do
127
105
  process_template_data_flows
128
106
  end
129
107
 
@@ -135,11 +113,11 @@ class Brakeman::Scanner
135
113
  process_controllers
136
114
  end
137
115
 
138
- process_step 'Processing data flow in controllers' do
116
+ process_step 'Processing data flow' do
139
117
  process_controller_data_flows
140
118
  end
141
119
 
142
- process_step 'Indexing call sites' do
120
+ process_step 'Indexing method calls' do
143
121
  index_call_sites
144
122
  end
145
123
 
@@ -154,6 +132,7 @@ class Brakeman::Scanner
154
132
  template_parser = Brakeman::TemplateParser.new(tracker, fp)
155
133
 
156
134
  fp.read_files(template_paths) do |path, contents|
135
+ Brakeman.logger.spin
157
136
  template_parser.parse_template(path, contents)
158
137
  end
159
138
 
@@ -167,6 +146,8 @@ class Brakeman::Scanner
167
146
  detector = Brakeman::FileTypeDetector.new
168
147
 
169
148
  astfiles.each do |file|
149
+ Brakeman.logger.spin
150
+
170
151
  if file.is_a? Brakeman::TemplateParser::TemplateFile
171
152
  file_cache.add_file file, :template
172
153
  else
@@ -202,7 +183,7 @@ class Brakeman::Scanner
202
183
  options[:rails3] or options[:escape_html]
203
184
 
204
185
  tracker.config.escape_html = true
205
- Brakeman.notify "[Notice] Escaping HTML by default"
186
+ Brakeman.debug 'Escaping HTML by default'
206
187
  end
207
188
 
208
189
  if @app_tree.exists? ".ruby-version"
@@ -222,7 +203,7 @@ class Brakeman::Scanner
222
203
  end
223
204
 
224
205
  rescue => e
225
- Brakeman.notify "[Notice] Error while processing #{path}"
206
+ Brakeman.alert "Error while processing #{path}"
226
207
  tracker.error e.exception(e.message + "\nwhile processing #{path}"), e.backtrace
227
208
  end
228
209
 
@@ -264,7 +245,7 @@ class Brakeman::Scanner
264
245
  @processor.process_gems gem_files
265
246
  end
266
247
  rescue => e
267
- Brakeman.notify "[Notice] Error while processing Gemfile."
248
+ Brakeman.alert 'Error while processing Gemfile'
268
249
  tracker.error e.exception(e.message + "\nWhile processing Gemfile"), e.backtrace
269
250
  end
270
251
 
@@ -273,16 +254,16 @@ class Brakeman::Scanner
273
254
  unless tracker.options[:rails3] or tracker.options[:rails4]
274
255
  if @app_tree.exists?("script/rails")
275
256
  tracker.options[:rails3] = true
276
- Brakeman.notify "[Notice] Detected Rails 3 application"
257
+ Brakeman.debug 'Detected Rails 3 application'
277
258
  elsif @app_tree.exists?("app/channels")
278
259
  tracker.options[:rails3] = true
279
260
  tracker.options[:rails4] = true
280
261
  tracker.options[:rails5] = true
281
- Brakeman.notify "[Notice] Detected Rails 5 application"
262
+ Brakeman.debug 'Detected Rails 5 application'
282
263
  elsif not @app_tree.exists?("script")
283
264
  tracker.options[:rails3] = true
284
265
  tracker.options[:rails4] = true
285
- Brakeman.notify "[Notice] Detected Rails 4 application"
266
+ Brakeman.debug 'Detected Rails 4 application'
286
267
  end
287
268
  end
288
269
  end
@@ -303,15 +284,10 @@ class Brakeman::Scanner
303
284
  @processor.process_initializer(init.path, init.ast)
304
285
  end
305
286
 
306
- #Process all .rb in lib/
307
- #
308
- #Adds parsed information to tracker.libs.
287
+ # Adds parsed information to tracker.libs.
288
+ # This is a catch-all for any Ruby files that weren't determined
289
+ # to be a specific type of file (like a controller).
309
290
  def process_libs
310
- if options[:skip_libs]
311
- Brakeman.notify '[Skipping]'
312
- return
313
- end
314
-
315
291
  libs = file_cache.libs.sort_by { |path, _| path }
316
292
 
317
293
  track_progress libs do |path, lib|
@@ -335,11 +311,11 @@ class Brakeman::Scanner
335
311
  if routes_sexp = parse_ruby_file(file)
336
312
  @processor.process_routes routes_sexp
337
313
  else
338
- Brakeman.notify "[Notice] Error while processing routes - assuming all public controller methods are actions."
314
+ Brakeman.alert 'Error while processing routes - assuming all public controller methods are actions.'
339
315
  options[:assume_all_routes] = true
340
316
  end
341
317
  else
342
- Brakeman.notify "[Notice] No route information found"
318
+ Brakeman.alert 'No route information found'
343
319
  end
344
320
  end
345
321
 
@@ -427,15 +403,15 @@ class Brakeman::Scanner
427
403
  total = list.length
428
404
  current = 0
429
405
  list.each do |item|
430
- report_progress current, total, type
406
+ report_progress current, total
431
407
  current += 1
432
408
  yield item
433
409
  end
434
410
  end
435
411
 
436
- def report_progress(current, total, type = "files")
412
+ def report_progress(current, total)
437
413
  return unless @options[:report_progress]
438
- $stderr.print " #{current}/#{total} #{type} processed\r"
414
+ Brakeman.logger.update_progress(current, total)
439
415
  end
440
416
 
441
417
  def index_call_sites
@@ -55,13 +55,23 @@ module Brakeman
55
55
  if src.node_type == :defs
56
56
  @class_methods[name] = meth_info
57
57
 
58
- # TODO fix this weirdness
59
- name = :"#{src[1]}.#{name}"
58
+ name = :"#{method_definition_receiver(src[1])}.#{name}"
60
59
  end
61
60
 
62
61
  @methods[visibility][name] = meth_info
63
62
  end
64
63
 
64
+ def method_definition_receiver(receiver)
65
+ return receiver if receiver.is_a?(Symbol)
66
+
67
+ case receiver.sexp_type
68
+ when :self
69
+ "self"
70
+ else
71
+ receiver[1].to_s
72
+ end
73
+ end
74
+
65
75
  def each_method
66
76
  @methods.each do |_vis, meths|
67
77
  meths.each do |name, info|
@@ -5,7 +5,7 @@ module Brakeman
5
5
  include Util
6
6
 
7
7
  attr_reader :gems, :rails, :ruby_version, :tracker
8
- attr_writer :erubis, :escape_html
8
+ attr_writer :erubi, :escape_html
9
9
 
10
10
  def initialize tracker
11
11
  @tracker = tracker
@@ -13,7 +13,7 @@ module Brakeman
13
13
  @gems = {}
14
14
  @settings = {}
15
15
  @escape_html = nil
16
- @erubis = nil
16
+ @erubi = nil
17
17
  @ruby_version = nil
18
18
  @rails_version = nil
19
19
  end
@@ -28,8 +28,8 @@ module Brakeman
28
28
  false
29
29
  end
30
30
 
31
- def erubis?
32
- @erubis
31
+ def erubi?
32
+ @erubi
33
33
  end
34
34
 
35
35
  def escape_html?
@@ -88,29 +88,29 @@ module Brakeman
88
88
  if tracker.options[:rails3].nil? and tracker.options[:rails4].nil?
89
89
  if @rails_version.start_with? "3"
90
90
  tracker.options[:rails3] = true
91
- Brakeman.notify "[Notice] Detected Rails 3 application"
91
+ notify_version 3
92
92
  elsif @rails_version.start_with? "4"
93
93
  tracker.options[:rails3] = true
94
94
  tracker.options[:rails4] = true
95
- Brakeman.notify "[Notice] Detected Rails 4 application"
95
+ notify_version 4
96
96
  elsif @rails_version.start_with? "5"
97
97
  tracker.options[:rails3] = true
98
98
  tracker.options[:rails4] = true
99
99
  tracker.options[:rails5] = true
100
- Brakeman.notify "[Notice] Detected Rails 5 application"
100
+ notify_version 5
101
101
  elsif @rails_version.start_with? "6"
102
102
  tracker.options[:rails3] = true
103
103
  tracker.options[:rails4] = true
104
104
  tracker.options[:rails5] = true
105
105
  tracker.options[:rails6] = true
106
- Brakeman.notify "[Notice] Detected Rails 6 application"
106
+ notify_version 6
107
107
  elsif @rails_version.start_with? "7"
108
108
  tracker.options[:rails3] = true
109
109
  tracker.options[:rails4] = true
110
110
  tracker.options[:rails5] = true
111
111
  tracker.options[:rails6] = true
112
112
  tracker.options[:rails7] = true
113
- Brakeman.notify "[Notice] Detected Rails 7 application"
113
+ notify_version 7
114
114
  elsif @rails_version.start_with? "8"
115
115
  tracker.options[:rails3] = true
116
116
  tracker.options[:rails4] = true
@@ -118,14 +118,14 @@ module Brakeman
118
118
  tracker.options[:rails6] = true
119
119
  tracker.options[:rails7] = true
120
120
  tracker.options[:rails8] = true
121
- Brakeman.notify "[Notice] Detected Rails 8 application"
121
+ notify_version 8
122
122
  end
123
123
  end
124
124
  end
125
125
 
126
126
  if get_gem :rails_xss
127
127
  @escape_html = true
128
- Brakeman.notify "[Notice] Escaping HTML by default"
128
+ Brakeman.debug "Escaping HTML by default"
129
129
  end
130
130
  end
131
131
 
@@ -182,7 +182,7 @@ module Brakeman
182
182
  option = config[o]
183
183
 
184
184
  if not option.is_a? Hash
185
- Brakeman.debug "[Notice] Skipping config setting: #{path.map(&:to_s).join(".")}"
185
+ Brakeman.debug "Skipping config setting: #{path.map(&:to_s).join(".")}"
186
186
  return
187
187
  end
188
188
 
@@ -202,7 +202,7 @@ module Brakeman
202
202
  version = tracker.config.rails[:load_defaults].value.to_s
203
203
 
204
204
  unless version.match?(/^\d+\.\d+$/)
205
- Brakeman.debug "[Notice] Unknown version: #{tracker.config.rails[:load_defaults]}"
205
+ Brakeman.alert "Unknown version: #{tracker.config.rails[:load_defaults]}"
206
206
  return
207
207
  end
208
208
 
@@ -284,5 +284,9 @@ module Brakeman
284
284
  set_rails_config(value: true_value, path: [:active_support, :use_rfc4122_namespaced_uuids])
285
285
  end
286
286
  end
287
+
288
+ private def notify_version version
289
+ Brakeman.debug "Detected Rails #{version} application"
290
+ end
287
291
  end
288
292
  end
@@ -29,7 +29,7 @@ module Brakeman
29
29
 
30
30
  def set_name name, context
31
31
  @name = name
32
- @name_array = Constants.constant_as_array(name)
32
+ @name_array = Constants.constant_as_array(name, context)
33
33
  end
34
34
 
35
35
  def match? name
@@ -129,7 +129,22 @@ module Brakeman
129
129
  end
130
130
  end
131
131
 
132
- def self.constant_as_array exp
132
+ def self.constant_as_array exp, context = nil
133
+ # Only prepend context for simple (unqualified) constants
134
+ if context && (exp.is_a?(Symbol) || (exp.is_a?(Sexp) && exp.node_type == :const))
135
+ context_name = context[:module] || context[:class]
136
+ context_name = context_name.name if context_name.respond_to?(:name)
137
+ if context_name
138
+ # Build colon2 chain: A::B becomes s(:colon2, s(:const, :A), :B)
139
+ parts = context_name.to_s.split("::")
140
+ base = Sexp.new(:const, parts.first.to_sym)
141
+ parts[1..].each do |part|
142
+ base = Sexp.new(:colon2, base, part.to_sym)
143
+ end
144
+ exp = Sexp.new(:colon2, base, exp)
145
+ end
146
+ end
147
+
133
148
  res = []
134
149
  while exp
135
150
  if exp.is_a? Sexp
@@ -132,7 +132,7 @@ module Brakeman
132
132
  when :lit, :str
133
133
  filter[option.value] = value[1]
134
134
  else
135
- Brakeman.debug "[Notice] Unknown before_filter value: #{option} => #{value}"
135
+ Brakeman.debug "Unknown before_filter value: #{option} => #{value}"
136
136
  end
137
137
  end
138
138
  else
@@ -101,15 +101,9 @@ class Brakeman::Tracker
101
101
  @app_path ||= File.expand_path @options[:app_path]
102
102
  end
103
103
 
104
- #Iterate over all methods in controllers and models.
104
+ #Iterate over all methods
105
105
  def each_method
106
- classes = [self.controllers, self.models]
107
-
108
- if @options[:index_libs]
109
- classes << self.libs
110
- end
111
-
112
- classes.each do |set|
106
+ [self.controllers, self.models, self.libs].each do |set|
113
107
  set.each do |set_name, collection|
114
108
  collection.each_method do |method_name, definition|
115
109
  src = definition.src
@@ -137,13 +131,7 @@ class Brakeman::Tracker
137
131
 
138
132
 
139
133
  def each_class
140
- classes = [self.controllers, self.models]
141
-
142
- if @options[:index_libs]
143
- classes << self.libs
144
- end
145
-
146
- classes.each do |set|
134
+ [self.controllers, self.models, self.libs].each do |set|
147
135
  set.each do |set_name, collection|
148
136
  collection.src.each do |file, src|
149
137
  yield src, set_name, file
@@ -329,6 +317,8 @@ class Brakeman::Tracker
329
317
  finder = Brakeman::FindAllCalls.new self
330
318
 
331
319
  method_sets.each do |set|
320
+ Brakeman.logger.spin
321
+
332
322
  set.each do |set_name, info|
333
323
  info.each_method do |method_name, definition|
334
324
  src = definition.src
@@ -339,12 +329,14 @@ class Brakeman::Tracker
339
329
 
340
330
  if locations.include? :templates
341
331
  self.each_template do |_name, template|
332
+ Brakeman.logger.spin
342
333
  finder.process_source template.src, :template => template, :file => template.file
343
334
  end
344
335
  end
345
336
 
346
337
  if locations.include? :initializers
347
338
  self.initializers.each do |file_name, src|
339
+ Brakeman.logger.spin
348
340
  finder.process_all_source src, :file => file_name
349
341
  end
350
342
  end
@@ -1,3 +1,3 @@
1
1
  module Brakeman
2
- Version = "7.1.2"
2
+ Version = "8.0.0"
3
3
  end