brakeman 7.1.2 → 8.0.6

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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +48 -0
  3. data/README.md +1 -1
  4. data/bundle/load.rb +7 -7
  5. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/NEWS.md +39 -1
  6. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/README.md +1 -1
  7. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/parser.rb +7 -2
  8. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/row.rb +26 -2
  9. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/version.rb +1 -1
  10. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv.rb +30 -58
  11. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/CHANGELOG +111 -0
  12. data/bundle/ruby/3.2.0/gems/{erubis-2.7.0 → erubi-1.13.1}/MIT-LICENSE +1 -0
  13. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/README.rdoc +151 -0
  14. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_block.rb +91 -0
  15. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_end.rb +58 -0
  16. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi.rb +299 -0
  17. data/bundle/ruby/3.2.0/gems/parallel-1.28.0/lib/parallel/version.rb +4 -0
  18. data/bundle/ruby/3.2.0/gems/{parallel-1.27.0 → parallel-1.28.0}/lib/parallel.rb +11 -0
  19. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/io/ansi.rb +6 -4
  20. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/io/windows.rb +49 -23
  21. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/io.rb +8 -2
  22. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/line_editor.rb +49 -21
  23. data/bundle/ruby/3.2.0/gems/reline-0.7.0/lib/reline/version.rb +3 -0
  24. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline.rb +10 -9
  25. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/CHANGES +8 -2
  26. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/Gemfile +5 -2
  27. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/LICENSE +1 -1
  28. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/README.jp.md +10 -12
  29. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/README.md +21 -26
  30. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/embedded.rb +1 -1
  31. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/logic_less/context.rb +4 -3
  32. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/splat/builder.rb +18 -19
  33. data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/version.rb +1 -1
  34. data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/CHANGES +8 -0
  35. data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/README.md +1 -1
  36. data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/static_analyzer.rb +1 -1
  37. data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/string_splitter.rb +61 -5
  38. data/bundle/ruby/3.2.0/gems/temple-0.10.6/lib/temple/parser_engine.rb +34 -0
  39. data/bundle/ruby/3.2.0/gems/temple-0.10.6/lib/temple/static_analyzer.rb +148 -0
  40. data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/version.rb +1 -1
  41. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/COPYING +1 -1
  42. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/asciidoc.rb +12 -5
  43. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/babel.rb +5 -0
  44. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/builder.rb +4 -0
  45. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/coffee.rb +14 -4
  46. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/commonmarker.rb +65 -0
  47. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/csv.rb +63 -0
  48. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/erb.rb +130 -0
  49. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/erubi.rb +41 -8
  50. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/etanni.rb +7 -0
  51. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/haml.rb +67 -1
  52. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/kramdown.rb +59 -0
  53. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/liquid.rb +93 -0
  54. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/livescript.rb +11 -4
  55. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/mapping.rb +8 -8
  56. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/markaby.rb +11 -2
  57. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/nokogiri.rb +13 -2
  58. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/pandoc.rb +81 -0
  59. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/pipeline.rb +6 -1
  60. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/plain.rb +5 -1
  61. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/prawn.rb +17 -6
  62. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/radius.rb +96 -0
  63. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/rdiscount.rb +82 -0
  64. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/rdoc.rb +41 -0
  65. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/redcarpet.rb +73 -0
  66. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/redcloth.rb +40 -0
  67. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/rst-pandoc.rb +33 -0
  68. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/sass.rb +16 -3
  69. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/slim.rb +18 -0
  70. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/string.rb +10 -2
  71. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/template.rb +5 -5
  72. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/typescript.rb +5 -0
  73. data/bundle/ruby/3.2.0/gems/tilt-2.8.0/lib/tilt/yajl.rb +91 -0
  74. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt.rb +1 -2
  75. data/lib/brakeman/app_tree.rb +7 -2
  76. data/lib/brakeman/checks/check_eol_rails.rb +2 -1
  77. data/lib/brakeman/checks/check_eol_ruby.rb +1 -0
  78. data/lib/brakeman/checks/check_execute.rb +23 -19
  79. data/lib/brakeman/checks/check_model_attributes.rb +1 -1
  80. data/lib/brakeman/checks/check_render.rb +1 -27
  81. data/lib/brakeman/checks/check_render_rce.rb +43 -0
  82. data/lib/brakeman/checks/check_session_settings.rb +1 -1
  83. data/lib/brakeman/checks/check_sql.rb +4 -3
  84. data/lib/brakeman/checks.rb +31 -25
  85. data/lib/brakeman/commandline.rb +17 -5
  86. data/lib/brakeman/file_parser.rb +3 -2
  87. data/lib/brakeman/logger.rb +265 -0
  88. data/lib/brakeman/options.rb +6 -11
  89. data/lib/brakeman/parsers/rails_erubi.rb +82 -0
  90. data/lib/brakeman/parsers/template_parser.rb +7 -15
  91. data/lib/brakeman/processor.rb +2 -2
  92. data/lib/brakeman/processors/base_processor.rb +13 -6
  93. data/lib/brakeman/processors/controller_alias_processor.rb +1 -1
  94. data/lib/brakeman/processors/controller_processor.rb +3 -3
  95. data/lib/brakeman/processors/{erubis_template_processor.rb → erubi_template_procesor.rb} +3 -3
  96. data/lib/brakeman/processors/gem_processor.rb +1 -1
  97. data/lib/brakeman/processors/haml_template_processor.rb +3 -1
  98. data/lib/brakeman/processors/lib/rails2_config_processor.rb +4 -3
  99. data/lib/brakeman/processors/lib/rails2_route_processor.rb +1 -1
  100. data/lib/brakeman/processors/lib/rails3_config_processor.rb +10 -1
  101. data/lib/brakeman/processors/lib/render_helper.rb +4 -2
  102. data/lib/brakeman/processors/lib/render_path.rb +1 -1
  103. data/lib/brakeman/processors/model_processor.rb +1 -1
  104. data/lib/brakeman/report/ignore/config.rb +1 -1
  105. data/lib/brakeman/scanner.rb +33 -51
  106. data/lib/brakeman/tracker/collection.rb +12 -2
  107. data/lib/brakeman/tracker/config.rb +17 -13
  108. data/lib/brakeman/tracker/constants.rb +17 -2
  109. data/lib/brakeman/tracker/controller.rb +1 -1
  110. data/lib/brakeman/tracker.rb +7 -15
  111. data/lib/brakeman/version.rb +1 -1
  112. data/lib/brakeman.rb +109 -55
  113. metadata +182 -210
  114. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/CHANGES.txt +0 -828
  115. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/README.txt +0 -102
  116. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis +0 -3468
  117. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis-run.rb +0 -132
  118. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/inline-require +0 -179
  119. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/context.rb +0 -83
  120. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/converter.rb +0 -357
  121. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ec.rb +0 -117
  122. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ecpp.rb +0 -113
  123. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejava.rb +0 -110
  124. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejavascript.rb +0 -119
  125. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/enhanced.rb +0 -126
  126. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eperl.rb +0 -95
  127. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ephp.rb +0 -99
  128. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb +0 -125
  129. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/escheme.rb +0 -114
  130. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/optimized.rb +0 -127
  131. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine.rb +0 -120
  132. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/enhancer.rb +0 -723
  133. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/error.rb +0 -23
  134. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/evaluator.rb +0 -88
  135. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/generator.rb +0 -85
  136. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helper.rb +0 -47
  137. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_form_helper.rb +0 -197
  138. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_helper.rb +0 -353
  139. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/local-setting.rb +0 -9
  140. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/main.rb +0 -516
  141. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/preprocessing.rb +0 -58
  142. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/tiny.rb +0 -144
  143. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/util.rb +0 -22
  144. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis.rb +0 -73
  145. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/setup.rb +0 -1331
  146. data/bundle/ruby/3.2.0/gems/parallel-1.27.0/lib/parallel/version.rb +0 -4
  147. data/bundle/ruby/3.2.0/gems/reline-0.6.3/lib/reline/version.rb +0 -3
  148. data/bundle/ruby/3.2.0/gems/temple-0.10.4/lib/temple/static_analyzer.rb +0 -78
  149. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/creole.rb +0 -16
  150. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/csv.rb +0 -53
  151. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/erb.rb +0 -65
  152. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/kramdown.rb +0 -13
  153. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/liquid.rb +0 -37
  154. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pandoc.rb +0 -39
  155. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/radius.rb +0 -41
  156. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdiscount.rb +0 -23
  157. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdoc.rb +0 -11
  158. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcarpet.rb +0 -31
  159. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcloth.rb +0 -13
  160. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rst-pandoc.rb +0 -10
  161. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/slim.rb +0 -5
  162. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/yajl.rb +0 -81
  163. data/lib/brakeman/parsers/erubis_patch.rb +0 -11
  164. data/lib/brakeman/parsers/rails2_erubis.rb +0 -9
  165. data/lib/brakeman/parsers/rails2_xss_plugin_erubis.rb +0 -52
  166. data/lib/brakeman/parsers/rails3_erubis.rb +0 -85
  167. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/LICENSE.txt +0 -0
  168. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/core_ext/array.rb +0 -0
  169. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/core_ext/string.rb +0 -0
  170. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/fields_converter.rb +0 -0
  171. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/input_record_separator.rb +0 -0
  172. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/table.rb +0 -0
  173. data/bundle/ruby/3.2.0/gems/{csv-3.3.5 → csv-3.3.6}/lib/csv/writer.rb +0 -0
  174. data/bundle/ruby/3.2.0/gems/{parallel-1.27.0 → parallel-1.28.0}/MIT-LICENSE.txt +0 -0
  175. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/BSDL +0 -0
  176. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/COPYING +0 -0
  177. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/README.md +0 -0
  178. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/config.rb +0 -0
  179. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/face.rb +0 -0
  180. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/history.rb +0 -0
  181. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/io/dumb.rb +0 -0
  182. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/key_actor/base.rb +0 -0
  183. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/key_actor/composite.rb +0 -0
  184. data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/key_actor/emacs.rb +2 -2
  185. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/key_actor/vi_command.rb +0 -0
  186. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/key_actor/vi_insert.rb +0 -0
  187. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/key_actor.rb +0 -0
  188. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/key_stroke.rb +0 -0
  189. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/kill_ring.rb +0 -0
  190. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/unicode/east_asian_width.rb +0 -0
  191. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/lib/reline/unicode.rb +0 -0
  192. /data/bundle/ruby/3.2.0/gems/{reline-0.6.3 → reline-0.7.0}/license_of_rb-readline +0 -0
  193. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/code_attributes.rb +0 -0
  194. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/command.rb +0 -0
  195. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/controls.rb +0 -0
  196. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/do_inserter.rb +0 -0
  197. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/end_inserter.rb +0 -0
  198. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/engine.rb +0 -0
  199. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/erb_converter.rb +0 -0
  200. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/filter.rb +0 -0
  201. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/grammar.rb +0 -0
  202. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/include.rb +0 -0
  203. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/interpolation.rb +0 -0
  204. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/logic_less/filter.rb +0 -0
  205. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/logic_less.rb +0 -0
  206. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/parser.rb +0 -0
  207. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/railtie.rb +0 -0
  208. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/smart/escaper.rb +0 -0
  209. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/smart/filter.rb +0 -0
  210. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/smart/parser.rb +0 -0
  211. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/smart.rb +0 -0
  212. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/splat/filter.rb +0 -0
  213. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/template.rb +0 -0
  214. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim/translator.rb +0 -0
  215. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/lib/slim.rb +0 -0
  216. /data/bundle/ruby/3.2.0/gems/{slim-5.2.1 → slim-5.2.2}/slim.gemspec +0 -0
  217. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/EXPRESSIONS.md +0 -0
  218. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/Gemfile +0 -0
  219. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/LICENSE +0 -0
  220. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/engine.rb +0 -0
  221. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/erb/engine.rb +0 -0
  222. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/erb/parser.rb +0 -0
  223. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/erb/template.rb +0 -0
  224. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/erb/trimming.rb +0 -0
  225. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/exceptions.rb +0 -0
  226. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filter.rb +0 -0
  227. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/ambles.rb +0 -0
  228. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/code_merger.rb +0 -0
  229. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/control_flow.rb +0 -0
  230. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/dynamic_inliner.rb +0 -0
  231. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/dynamic_merger.rb +0 -0
  232. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/encoding.rb +0 -0
  233. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/eraser.rb +0 -0
  234. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/escapable.rb +0 -0
  235. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/multi_flattener.rb +0 -0
  236. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/remove_bom.rb +0 -0
  237. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/static_merger.rb +0 -0
  238. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/filters/validator.rb +0 -0
  239. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/generator.rb +0 -0
  240. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/generators/array.rb +0 -0
  241. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/generators/array_buffer.rb +0 -0
  242. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/generators/erb.rb +0 -0
  243. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/generators/rails_output_buffer.rb +0 -0
  244. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/generators/string_buffer.rb +0 -0
  245. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/grammar.rb +0 -0
  246. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/attribute_merger.rb +0 -0
  247. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/attribute_remover.rb +0 -0
  248. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/attribute_sorter.rb +0 -0
  249. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/dispatcher.rb +0 -0
  250. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/fast.rb +0 -0
  251. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/filter.rb +0 -0
  252. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/pretty.rb +0 -0
  253. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/html/safe.rb +0 -0
  254. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/map.rb +0 -0
  255. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/mixins/dispatcher.rb +0 -0
  256. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/mixins/engine_dsl.rb +0 -0
  257. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/mixins/grammar_dsl.rb +0 -0
  258. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/mixins/options.rb +0 -0
  259. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/mixins/template.rb +0 -0
  260. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/parser.rb +0 -0
  261. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/templates/rails.rb +0 -0
  262. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/templates/tilt.rb +0 -0
  263. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/templates.rb +0 -0
  264. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple/utils.rb +0 -0
  265. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/lib/temple.rb +0 -0
  266. /data/bundle/ruby/3.2.0/gems/{temple-0.10.4 → temple-0.10.6}/temple.gemspec +0 -0
  267. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/_emacs_org.rb +0 -0
  268. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/_handlebars.rb +0 -0
  269. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/_jbuilder.rb +0 -0
  270. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/_org.rb +0 -0
  271. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.8.0}/lib/tilt/cli.rb +0 -0
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+ # Copied almost verbatim from Rails
3
+ # https://github.com/rails/rails/blob/5359cf8a5b093b04170e884ee8da5a1e076b8a0d/actionview/lib/action_view/template/handlers/erb/erubi.rb#L9
4
+
5
+ Brakeman.load_brakeman_dependency "erubi"
6
+
7
+ module Brakeman
8
+ class Erubi < ::Erubi::Engine
9
+ # :nodoc: all
10
+ def initialize(input, properties = {})
11
+ @newline_pending = 0
12
+
13
+ # Dup properties so that we don't modify argument
14
+ properties = Hash[properties]
15
+
16
+ properties[:bufvar] ||= "@output_buffer"
17
+ properties[:preamble] ||= ""
18
+ properties[:postamble] ||= "#{properties[:bufvar]}"
19
+
20
+ # Tell Erubi whether the template will be compiled with `frozen_string_literal: true`
21
+ # properties[:freeze_template_literals] = !Template.frozen_string_literal
22
+ properties[:freeze_template_literals] = false
23
+
24
+ properties[:escapefunc] = ""
25
+
26
+ super
27
+ end
28
+
29
+ private
30
+ def add_text(text)
31
+ return if text.empty?
32
+
33
+ if text == "\n"
34
+ @newline_pending += 1
35
+ else
36
+ with_buffer do
37
+ src << ".safe_append='"
38
+ src << "\n" * @newline_pending if @newline_pending > 0
39
+ src << text.gsub(/['\\]/, '\\\\\&') << @text_end
40
+ end
41
+ @newline_pending = 0
42
+ end
43
+ end
44
+
45
+ BLOCK_EXPR = /((\s|\))do|\{)(\s*\|[^|]*\|)?\s*\Z/
46
+
47
+ def add_expression(indicator, code)
48
+ flush_newline_if_pending(src)
49
+
50
+ with_buffer do
51
+ if (indicator == "==") || @escape
52
+ src << ".safe_expr_append="
53
+ else
54
+ src << ".append="
55
+ end
56
+
57
+ if BLOCK_EXPR.match?(code)
58
+ src << " " << code
59
+ else
60
+ src << "(" << code << ")"
61
+ end
62
+ end
63
+ end
64
+
65
+ def add_code(code)
66
+ flush_newline_if_pending(src)
67
+ super
68
+ end
69
+
70
+ def add_postamble(_)
71
+ flush_newline_if_pending(src)
72
+ super
73
+ end
74
+
75
+ def flush_newline_if_pending(src)
76
+ if @newline_pending > 0
77
+ with_buffer { src << ".safe_append='#{"\n" * @newline_pending}" << @text_end }
78
+ @newline_pending = 0
79
+ end
80
+ end
81
+ end
82
+ end
@@ -21,7 +21,7 @@ module Brakeman
21
21
  begin
22
22
  src = case type
23
23
  when :erb
24
- type = :erubis if erubis?
24
+ type = :erubi if erubi?
25
25
  parse_erb path, text
26
26
  when :haml
27
27
  type = :haml6 if haml6?
@@ -46,17 +46,9 @@ module Brakeman
46
46
  end
47
47
 
48
48
  def parse_erb path, text
49
- if tracker.config.escape_html?
50
- if tracker.options[:rails3]
51
- require 'brakeman/parsers/rails3_erubis'
52
- Brakeman::Rails3Erubis.new(text, :filename => path).src
53
- else
54
- require 'brakeman/parsers/rails2_xss_plugin_erubis'
55
- Brakeman::Rails2XSSPluginErubis.new(text, :filename => path).src
56
- end
57
- elsif tracker.config.erubis?
58
- require 'brakeman/parsers/rails2_erubis'
59
- Brakeman::ScannerErubis.new(text, :filename => path).src
49
+ if erubi?
50
+ require 'brakeman/parsers/rails_erubi'
51
+ Brakeman::Erubi.new(text, :filename => path).src
60
52
  else
61
53
  require 'erb'
62
54
  src = if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+
@@ -69,9 +61,9 @@ module Brakeman
69
61
  end
70
62
  end
71
63
 
72
- def erubis?
64
+ def erubi?
73
65
  tracker.config.escape_html? or
74
- tracker.config.erubis?
66
+ tracker.config.erubi?
75
67
  end
76
68
 
77
69
  def parse_haml path, text
@@ -148,7 +140,7 @@ module Brakeman
148
140
  fp = Brakeman::FileParser.new(tracker.app_tree, tracker.options[:parser_timeout])
149
141
  tp = self.new(tracker, fp)
150
142
  src = tp.parse_erb '_inline_', text
151
- type = tp.erubis? ? :erubis : :erb
143
+ type = tp.erubi? ? :erubi : :erb
152
144
 
153
145
  return type, fp.parse_ruby(src, "_inline_")
154
146
  end
@@ -65,8 +65,8 @@ module Brakeman
65
65
  result = HamlTemplateProcessor.new(@tracker, name, called_from, file_name).process src
66
66
  when :haml6
67
67
  result = Haml6TemplateProcessor.new(@tracker, name, called_from, file_name).process src
68
- when :erubis
69
- result = ErubisTemplateProcessor.new(@tracker, name, called_from, file_name).process src
68
+ when :erubi
69
+ result = ErubiTemplateProcessor.new(@tracker, name, called_from, file_name).process src
70
70
  when :slim
71
71
  result = SlimTemplateProcessor.new(@tracker, name, called_from, file_name).process src
72
72
  else
@@ -258,12 +258,19 @@ class Brakeman::BaseProcessor < Brakeman::SexpProcessor
258
258
  #Look for "type" of render in options hash
259
259
  #For example, render :file => "blah"
260
260
  if hash? last_arg
261
- hash_iterate(last_arg) do |key, val|
262
- if symbol? key and types_in_hash.include? key.value
263
- type = key.value
264
- value = val
265
- else
266
- rest << key << val
261
+ if type
262
+ #The render type was already determined by a positional argument, so a
263
+ #key in the options hash that happens to match a render type name (e.g.
264
+ #`text:`) is a local passed to the partial/action, not a type directive.
265
+ rest = last_arg
266
+ else
267
+ hash_iterate(last_arg) do |key, val|
268
+ if symbol? key and types_in_hash.include? key.value
269
+ type = key.value
270
+ value = val
271
+ else
272
+ rest << key << val
273
+ end
267
274
  end
268
275
  end
269
276
  end
@@ -146,7 +146,7 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
146
146
  filter = tracker.find_method name, @current_class
147
147
 
148
148
  if filter.nil?
149
- Brakeman.debug "[Notice] Could not find filter #{name}"
149
+ Brakeman.debug "Could not find filter #{name}"
150
150
  return
151
151
  end
152
152
 
@@ -30,13 +30,13 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
30
30
  #But if not inside a controller already, then the class may include
31
31
  #a real controller, so we can't take this shortcut.
32
32
  if @current_class and @current_class.name.to_s.end_with? "Controller"
33
- Brakeman.debug "[Notice] Treating inner class as library: #{name}"
33
+ Brakeman.debug "Treating inner class as library: #{name}"
34
34
  Brakeman::LibraryProcessor.new(@tracker).process_library exp, @current_file
35
35
  return exp
36
36
  end
37
37
 
38
38
  if not name.to_s.end_with? "Controller"
39
- Brakeman.debug "[Notice] Adding noncontroller as library: #{name}"
39
+ Brakeman.debug "Adding noncontroller as library: #{name}"
40
40
  #Set the class to be a module in order to get the right namespacing.
41
41
  #Add class to libraries, in case it is needed later (e.g. it's used
42
42
  #as a parent class for a controller.)
@@ -124,7 +124,7 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
124
124
  if @app_tree.layout_exists?(name)
125
125
  @current_class.layout = "layouts/#{name}"
126
126
  else
127
- Brakeman.debug "[Notice] Layout not found: #{name}"
127
+ Brakeman.debug "Layout not found: #{name}"
128
128
  end
129
129
  elsif node_type? last_arg, :nil, :false
130
130
  #layout :false or layout nil
@@ -1,7 +1,7 @@
1
1
  require 'brakeman/processors/template_processor'
2
2
 
3
- #Processes ERB templates using Erubis instead of erb.
4
- class Brakeman::ErubisTemplateProcessor < Brakeman::TemplateProcessor
3
+ #Processes ERB templates using Erubi instead of erb.
4
+ class Brakeman::ErubiTemplateProcessor < Brakeman::TemplateProcessor
5
5
 
6
6
  #s(:call, TARGET, :method, ARGS)
7
7
  def process_call exp
@@ -14,7 +14,7 @@ class Brakeman::ErubisTemplateProcessor < Brakeman::TemplateProcessor
14
14
  exp.arglist = process exp.arglist
15
15
  method = exp.method
16
16
 
17
- #_buf is the default output variable for Erubis
17
+ #_buf is the default output variable for Erubi
18
18
  if node_type?(target, :lvar, :ivar) and (target.value == :_buf or target.value == :@output_buffer)
19
19
  if method == :<< or method == :safe_concat
20
20
 
@@ -6,7 +6,7 @@ class Brakeman::GemProcessor < Brakeman::BasicProcessor
6
6
  def initialize *args
7
7
  super
8
8
  @gem_name_version = /^\s*([-_+.A-Za-z0-9]+) \((\w(\.\w+)*)\)/
9
- @ruby_version = /^\s+ruby (\d\.\d.\d+)/
9
+ @ruby_version = /^\s+ruby (\d+\.\d+\.\d+)/
10
10
  end
11
11
 
12
12
  def process_gems gem_files
@@ -186,6 +186,8 @@ class Brakeman::HamlTemplateProcessor < Brakeman::TemplateProcessor
186
186
 
187
187
  def raw? exp
188
188
  call? exp and
189
- exp.method == :raw
189
+ exp.target.nil? and
190
+ exp.method == :raw and
191
+ exp.first_arg
190
192
  end
191
193
  end
@@ -33,14 +33,15 @@ class Brakeman::Rails2ConfigProcessor < Brakeman::BasicProcessor
33
33
  process res
34
34
  end
35
35
 
36
- #Check if config is set to use Erubis
36
+ # Check if config is set to use Erubis
37
+ # but because it's 2026 we're going to use Erubi
37
38
  def process_call exp
38
39
  target = exp.target
39
40
  target = process target if sexp? target
40
41
 
41
42
  if exp.method == :gem and exp.first_arg.value == "erubis"
42
- Brakeman.notify "[Notice] Using Erubis for ERB templates"
43
- @tracker.config.erubis = true
43
+ Brakeman.debug "[Notice] Using Erubi for ERB templates"
44
+ @tracker.config.erubi = true
44
45
  end
45
46
 
46
47
  exp
@@ -131,7 +131,7 @@ class Brakeman::Rails2RoutesProcessor < Brakeman::BasicProcessor
131
131
  when :except
132
132
  process_option_except value
133
133
  else
134
- Brakeman.notify "[Notice] Unhandled resource option, please report: #{option}"
134
+ Brakeman.alert "Unhandled resource option, please report: #{option}"
135
135
  end
136
136
  end
137
137
  end
@@ -17,6 +17,7 @@ require 'brakeman/processors/lib/basic_processor'
17
17
  #Values for tracker.config.rails will still be Sexps.
18
18
  class Brakeman::Rails3ConfigProcessor < Brakeman::BasicProcessor
19
19
  RAILS_CONFIG = Sexp.new(:call, nil, :config)
20
+ RAILS_APPLICATION = Sexp.new(:colon2, s(:const, :Rails), :Application)
20
21
 
21
22
  def initialize *args
22
23
  super
@@ -48,7 +49,7 @@ class Brakeman::Rails3ConfigProcessor < Brakeman::BasicProcessor
48
49
 
49
50
  #Look for class Application < Rails::Application
50
51
  def process_class exp
51
- if exp.class_name == :Application
52
+ if application_class? exp
52
53
  @inside_config = true
53
54
  process_all exp.body if sexp? exp.body
54
55
  @inside_config = false
@@ -57,6 +58,14 @@ class Brakeman::Rails3ConfigProcessor < Brakeman::BasicProcessor
57
58
  exp
58
59
  end
59
60
 
61
+ def application_class? exp
62
+ return unless node_type? exp, :class
63
+
64
+ exp.class_name == :Application or
65
+ (node_type? exp.class_name, :colon2 and exp.class_name.rhs == :Application) or
66
+ (exp.parent_name == RAILS_APPLICATION)
67
+ end
68
+
60
69
  #Look for configuration settings that
61
70
  #are just a call like
62
71
  #
@@ -19,7 +19,9 @@ module Brakeman::RenderHelper
19
19
  end
20
20
  when :default
21
21
  begin
22
- process_template template_name, exp[3], nil, exp.line
22
+ # exp[2] is either the action name (from controller) or :default when no explicit arg
23
+ name_arg = (exp[2].nil? || exp[2] == :default) ? nil : exp[2]
24
+ process_template template_name(name_arg), exp[3], nil, exp.line
23
25
  rescue ArgumentError
24
26
  Brakeman.debug "Problem processing render: #{exp}"
25
27
  end
@@ -98,7 +100,7 @@ module Brakeman::RenderHelper
98
100
  name = name.to_s.gsub(/^\//, "")
99
101
  template = @tracker.templates[name.to_sym]
100
102
  unless template
101
- Brakeman.debug "[Notice] No such template: #{name}"
103
+ Brakeman.debug "No such template: #{name}"
102
104
  return
103
105
  end
104
106
 
@@ -36,7 +36,7 @@ module Brakeman
36
36
  file: template.file,
37
37
  }
38
38
  else
39
- Brakeman.debug "[Notice] No render path to add template information"
39
+ Brakeman.debug "No render path to add template information"
40
40
  end
41
41
  end
42
42
 
@@ -27,7 +27,7 @@ class Brakeman::ModelProcessor < Brakeman::BaseProcessor
27
27
 
28
28
  #If inside an inner class we treat it as a library.
29
29
  if @current_class
30
- Brakeman.debug "[Notice] Treating inner class as library: #{name}"
30
+ Brakeman.debug "Treating inner class as library: #{name}"
31
31
  Brakeman::LibraryProcessor.new(@tracker).process_library exp, @current_file
32
32
  return exp
33
33
  end
@@ -107,7 +107,7 @@ module Brakeman
107
107
  raise e, "\nError[#{e.class}] while reading brakeman ignore file: #{file}\n"
108
108
  end
109
109
  else
110
- Brakeman.notify "[Notice] Could not find ignore configuration in #{file}"
110
+ Brakeman.alert "Could not find ignore configuration in #{file} (no file)"
111
111
  @already_ignored = []
112
112
  end
113
113
 
@@ -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,12 +183,18 @@ 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"
209
- if version = @app_tree.file_path(".ruby-version").read[/(\d\.\d.\d+)/]
210
- tracker.config.set_ruby_version version, @app_tree.file_path(".ruby-version"), 1
190
+ contents = @app_tree.file_path(".ruby-version").read
191
+ # Skip alternative Ruby implementations — the EOL dates Brakeman knows
192
+ # about are MRI's, so a `.ruby-version` of "jruby-10.0.2.0" should not
193
+ # be parsed as MRI 0.0.2 / 10.0.2.
194
+ unless contents =~ /\A\s*(jruby|truffleruby|rbx|rubinius|mruby)\b/i
195
+ if version = contents[/(\d+\.\d+\.\d+)/]
196
+ tracker.config.set_ruby_version version, @app_tree.file_path(".ruby-version"), 1
197
+ end
211
198
  end
212
199
  end
213
200
 
@@ -222,7 +209,7 @@ class Brakeman::Scanner
222
209
  end
223
210
 
224
211
  rescue => e
225
- Brakeman.notify "[Notice] Error while processing #{path}"
212
+ Brakeman.alert "Error while processing #{path}"
226
213
  tracker.error e.exception(e.message + "\nwhile processing #{path}"), e.backtrace
227
214
  end
228
215
 
@@ -264,7 +251,7 @@ class Brakeman::Scanner
264
251
  @processor.process_gems gem_files
265
252
  end
266
253
  rescue => e
267
- Brakeman.notify "[Notice] Error while processing Gemfile."
254
+ Brakeman.alert 'Error while processing Gemfile'
268
255
  tracker.error e.exception(e.message + "\nWhile processing Gemfile"), e.backtrace
269
256
  end
270
257
 
@@ -273,16 +260,16 @@ class Brakeman::Scanner
273
260
  unless tracker.options[:rails3] or tracker.options[:rails4]
274
261
  if @app_tree.exists?("script/rails")
275
262
  tracker.options[:rails3] = true
276
- Brakeman.notify "[Notice] Detected Rails 3 application"
263
+ Brakeman.debug 'Detected Rails 3 application'
277
264
  elsif @app_tree.exists?("app/channels")
278
265
  tracker.options[:rails3] = true
279
266
  tracker.options[:rails4] = true
280
267
  tracker.options[:rails5] = true
281
- Brakeman.notify "[Notice] Detected Rails 5 application"
268
+ Brakeman.debug 'Detected Rails 5 application'
282
269
  elsif not @app_tree.exists?("script")
283
270
  tracker.options[:rails3] = true
284
271
  tracker.options[:rails4] = true
285
- Brakeman.notify "[Notice] Detected Rails 4 application"
272
+ Brakeman.debug 'Detected Rails 4 application'
286
273
  end
287
274
  end
288
275
  end
@@ -303,15 +290,10 @@ class Brakeman::Scanner
303
290
  @processor.process_initializer(init.path, init.ast)
304
291
  end
305
292
 
306
- #Process all .rb in lib/
307
- #
308
- #Adds parsed information to tracker.libs.
293
+ # Adds parsed information to tracker.libs.
294
+ # This is a catch-all for any Ruby files that weren't determined
295
+ # to be a specific type of file (like a controller).
309
296
  def process_libs
310
- if options[:skip_libs]
311
- Brakeman.notify '[Skipping]'
312
- return
313
- end
314
-
315
297
  libs = file_cache.libs.sort_by { |path, _| path }
316
298
 
317
299
  track_progress libs do |path, lib|
@@ -335,11 +317,11 @@ class Brakeman::Scanner
335
317
  if routes_sexp = parse_ruby_file(file)
336
318
  @processor.process_routes routes_sexp
337
319
  else
338
- Brakeman.notify "[Notice] Error while processing routes - assuming all public controller methods are actions."
320
+ Brakeman.alert 'Error while processing routes - assuming all public controller methods are actions.'
339
321
  options[:assume_all_routes] = true
340
322
  end
341
323
  else
342
- Brakeman.notify "[Notice] No route information found"
324
+ Brakeman.alert 'No route information found'
343
325
  end
344
326
  end
345
327
 
@@ -427,15 +409,15 @@ class Brakeman::Scanner
427
409
  total = list.length
428
410
  current = 0
429
411
  list.each do |item|
430
- report_progress current, total, type
412
+ report_progress current, total
431
413
  current += 1
432
414
  yield item
433
415
  end
434
416
  end
435
417
 
436
- def report_progress(current, total, type = "files")
418
+ def report_progress(current, total)
437
419
  return unless @options[:report_progress]
438
- $stderr.print " #{current}/#{total} #{type} processed\r"
420
+ Brakeman.logger.update_progress(current, total)
439
421
  end
440
422
 
441
423
  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|