veracode 1.0.0.alpha18 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e42ef047b5e2b3f33eba714c33d5c13aa393679e704633ac93df478b6697c811
4
- data.tar.gz: 5adf88dcca009894d9f1631061750d108e9ec3ab77de5ac6083c95aeda5db4e6
3
+ metadata.gz: ae78d2f7729f0e00a2215edc4cee0d007ff0d653fb3d7cea8962e25de1548a98
4
+ data.tar.gz: f951565e38308c4335b5de9517fc750090957f068dc8ab3baa3eb3f9e3ea21e6
5
5
  SHA512:
6
- metadata.gz: afcf1ebbc31dfb94ade508fdf858f6815a088d66d40982f82e2f7c439929b3eb2c803b5d238cea1825f7ed5f60cb0d483caa4d85032542d60e91be970c9d2db2
7
- data.tar.gz: 8dd0fa92c21625c40df171a9ee8d4f5a8dc4f37f53f8a1dd223f5fbd8e5aefc1d0279915ff368d24b228eef690b0cafb5407a85c1cbb743e17e5127b34830c15
6
+ metadata.gz: 915f08c9538670e0218bd7b4e7e9597593532ee36dc41942d61ce28f0a72d3c001d6aa7d67b27cd23932aed3a8b32c853f71266b01fd1d1392fd3f5f83f5c89e
7
+ data.tar.gz: f8322116797c6934403a56c48328451efd27128f7c4eff1d6272e37ed6e860e436cd8f90a557d1f8bac516dc153f91fa88dac70bd1448a28e64b21f3ba828535
data/bin/veracode CHANGED
@@ -25,7 +25,7 @@ $options = {
25
25
  :include_inherited => false,
26
26
  :environment => false,
27
27
  :verbose => false,
28
- :jruby => false,
28
+ :skipenvironment => false,
29
29
  :skipactiverecord => false,
30
30
  :skipactionview => false,
31
31
  :skipsprockets => false,
@@ -42,8 +42,8 @@ case subcommand
42
42
  $options[:verbose] = true
43
43
  end
44
44
 
45
- opts.on("-j", "--jruby", "Force JRuby mode") do
46
- $options[:jruby] = true
45
+ opts.on("-E", "--skip-environment", "Skip environment") do
46
+ $options[:skipenvironment] = true
47
47
  end
48
48
 
49
49
  opts.on("-O", "--skip-active-record", "Skip ActiveRecord") do
@@ -70,6 +70,17 @@ case subcommand
70
70
  $options[:snapshot] = true
71
71
  end
72
72
 
73
+ # only print the options that match the documentation in the help center
74
+ opts.on("-h", "--help", "Print help") do
75
+ msg = <<-HELPMSG.strip
76
+ Usage: veracode prepare [options]
77
+ -v, --verbose Run verbosely
78
+ -D, --debug Enable debug output
79
+ HELPMSG
80
+ puts msg
81
+ exit
82
+ end
83
+
73
84
  end.parse!
74
85
 
75
86
  Veracode.prepare
data/lib/veracode.rb CHANGED
@@ -36,6 +36,7 @@ module Veracode
36
36
  @archive_filename = nil
37
37
  @archive_dirname = nil
38
38
 
39
+ @expanded_app_dir = Dir.getwd
39
40
 
40
41
  def self.init
41
42
  if Gem::Dependency.new('', '~> 2.2.0').match?('', RUBY_VERSION)
@@ -120,10 +121,11 @@ module Veracode
120
121
 
121
122
  @manifest += Dir.glob("*").keep_if {|f| File.file?(f)}
122
123
 
123
- # {app config db doc lib log public script test tmp vendor}
124
- %w{app config lib log public script vendor}.each {|dirname|
124
+ #{app config db doc lib log public script test tmp vendor}
125
+ %w{app config lib log public script}.each {|dirname|
125
126
  @manifest += Dir[File.join(dirname, "**", "*")].keep_if {|f| File.file?(f)}
126
127
  }
128
+ @manifest += Dir[File.join("vendor", "**", "*.rb")]
127
129
  @manifest += Dir[File.join("db", "**", "*.rb")]
128
130
 
129
131
  if $options[:archive_source]
@@ -288,24 +290,27 @@ module Veracode
288
290
  end
289
291
 
290
292
  def self.safe_name(o)
291
- case
292
- when o == ActiveSupport::TimeWithZone
293
- "ActiveSupport::TimeWithZone"
294
- when o.is_a?(Module)
295
- begin
296
- ( o.name.nil? ? o.to_s : o.name.to_s )
297
- rescue
293
+ begin
294
+ case
295
+ when o == ActiveSupport::TimeWithZone
296
+ "ActiveSupport::TimeWithZone"
297
+ when o.is_a?(Module)
298
298
  begin
299
- ( o.nil? ? "nil" : o.to_s )
299
+ ( o.name.nil? ? o.to_s : o.name.to_s )
300
300
  rescue
301
- log_error "Error testing #{o} with nil?. Probable monkey patching. #{e.message}"
302
- ( o == nil ? "nil" : o.to_s ) # in case of monkey patched nil?
301
+ begin
302
+ ( o.nil? ? "nil" : o.to_s )
303
+ rescue
304
+ ( o == nil ? "nil" : o.to_s ) # in case of monkey patched nil?
305
+ end
303
306
  end
307
+ when o.is_a?(Method), o.is_a?(UnboundMethod)
308
+ o.name.to_s
309
+ else
310
+ o.to_s
304
311
  end
305
- when o.is_a?(Method), o.is_a?(UnboundMethod)
306
- o.name.to_s
307
- else
308
- o.to_s
312
+ rescue
313
+ "Veracode" #should result in this being dropped from the archive since we can't get a safe name for it
309
314
  end
310
315
  end
311
316
 
@@ -397,8 +402,8 @@ module Veracode
397
402
 
398
403
  if with_disasm
399
404
  insns = RubyVM::InstructionSequence.disassemble(m)
400
- formatted += ( (insns.nil? || insns.empty?) ?
401
- "== disasm\n== end disasm\n" :
405
+ formatted += ( (insns.nil? || insns.empty? || insns[/.*#{@expanded_app_dir}.*/].nil?) ?
406
+ "\n" :
402
407
  "#{insns}== end disasm\n"
403
408
  )
404
409
  end
@@ -598,7 +603,22 @@ module Veracode
598
603
  safe_name(Veracode::ActiveRecord::Model),
599
604
  safe_name(Veracode::ActiveRecord::Schema)
600
605
  ]
601
- objects = objects.reject { |o| veracode_artifacts.include?(safe_name(o)) }
606
+ rails_filters = [
607
+ "ActionCable::",
608
+ "ActionController::",
609
+ "ActionDispatch::",
610
+ "ActionMailer::",
611
+ "ActiveJob::",
612
+ "ActiveSupport::",
613
+ "ActiveStorage::",
614
+ "ActionView::(?!CompiledTemplates)", #Allows Compiled templates with the not group
615
+ "ActiveRecord::",
616
+ ]
617
+ objects = objects.reject do |o|
618
+ sn = safe_name(o).dup
619
+ while with_disasm && !sn.slice!(/^#<(Class|Module):/).nil? do sn = sn[0..-2] end #strip #<Class: and #<Module: prefix, strip corresponding > suffix
620
+ veracode_artifacts.include?(sn) || (with_disasm && sn[/^(#{rails_filters.join('|')}).*/])
621
+ end
602
622
 
603
623
  if $options[:verbose]
604
624
  puts "Archiving #{objects.count.to_s} objects" + (with_disasm ? " with disassembly" : "")
@@ -607,10 +627,12 @@ module Veracode
607
627
 
608
628
  objects.sort_by {|o| safe_name(o) }.each do |o|
609
629
 
610
- puts "archiving #{o.class.to_s.downcase} #{quote(safe_name(o))}" if $options[:verbose]
630
+ sn = safe_name(o)
631
+ puts "archiving #{o.class.to_s.downcase} #{quote(sn)}" if $options[:verbose]
611
632
 
612
- add_to_archive "#{o.class.to_s.downcase} #{quote(safe_name(o))}\n" +
633
+ add_to_archive "#{o.class.to_s.downcase} #{quote(sn)}\n" +
613
634
  ( o.is_a?(Class) ? class_header(o) : "") + # superclass
635
+ ( @rails6 && sn == "ActionView::Base" ? "include \"ActionView::CompiledTemplates\"\n" : "") + #hack for rails 6 compiled template output
614
636
  ( o.is_a?(Module) ? module_header(o) : "") + # included modules
615
637
  ( o.is_a?(Object) ? object_contents(o, with_disasm) : "") +
616
638
  ( o.is_a?(Module) ? module_contents(o, with_disasm) : "") +
@@ -619,6 +641,33 @@ module Veracode
619
641
  end
620
642
  end
621
643
 
644
+ def self.archive_rails6_templates
645
+ puts "archiving views" if $options[:verbose]
646
+ o = @view.compiled_method_container
647
+ compiled_views = o.instance_methods - @view_methods
648
+ formatted_contents = ""
649
+ for m_symbol in compiled_views
650
+ begin
651
+ m = o.instance_method(m_symbol)
652
+ formatted_contents += format_method(m, "public_instance", true)
653
+ rescue Exception => e
654
+ log_error "Error archiving singleton method #{m_symbol.to_s.dump}: #{e.message}"
655
+ end
656
+ end
657
+ # fake the module outpput to match what SAF expects from Rails <= 5
658
+ add_to_archive "module \"ActionView::CompiledTemplates\"\n" +
659
+ "extend \"ActiveSupport::Dependencies::ModuleConstMissing\"\n" +
660
+ "extend \"Module::Concerning\"\n" +
661
+ "extend \"ActiveSupport::ToJsonWithActiveSupportEncoder\"\n" +
662
+ "extend \"PP::ObjectMixin\"\n" +
663
+ "extend \"ActiveSupport::Dependencies::Loadable\"\n" +
664
+ "extend \"JSON::Ext::Generator::GeneratorMethods::Object\"\n" +
665
+ "extend \"ActiveSupport::Tryable\"\n" +
666
+ "extend \"Kernel\"\n" +
667
+ formatted_contents +
668
+ "endmodule\n"
669
+ end
670
+
622
671
 
623
672
  def self.compile_templates
624
673
 
@@ -681,9 +730,11 @@ module Veracode
681
730
  end
682
731
  }
683
732
 
684
- puts "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates" if $options[:verbose]
685
- log_error "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates"
686
- log_error "Not all templates were compiled" if ActionView::CompiledTemplates.instance_methods.count < templates.count
733
+ unless @rails6
734
+ puts "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates" if $options[:verbose]
735
+ log_error "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates"
736
+ log_error "Not all templates were compiled" if ActionView::CompiledTemplates.instance_methods.count < templates.count
737
+ end
687
738
  end
688
739
 
689
740
  def self.compile_erb_templates
@@ -726,7 +777,9 @@ module Veracode
726
777
  )
727
778
 
728
779
  case t.method(:compile).arity
729
- when 2 # Rails 3.1.0+
780
+ when 1 # Rails 6
781
+ t.send(:compile, @view)
782
+ when 2 # Rails 3.1.0+
730
783
  t.send(:compile, ActionView::Base.new, ActionView::CompiledTemplates)
731
784
  when 3
732
785
  t.send(:compile, {}, ActionView::Base.new, ActionView::CompiledTemplates)
@@ -739,7 +792,7 @@ module Veracode
739
792
 
740
793
  }
741
794
 
742
- puts "Compiled templates: " + ActionView::CompiledTemplates.instance_methods.count.to_s if $options[:verbose]
795
+ puts "Compiled templates: " + ActionView::CompiledTemplates.instance_methods.count.to_s if $options[:verbose] && !@rails6
743
796
 
744
797
  end
745
798
 
@@ -782,7 +835,9 @@ module Veracode
782
835
  )
783
836
 
784
837
  case t.method(:compile).arity
785
- when 2 # Rails 3.1.0+
838
+ when 1 # Rails 6
839
+ t.send(:compile, @view)
840
+ when 2 # Rails 3.1.0+
786
841
  t.send(:compile, ActionView::Base.new, ActionView::CompiledTemplates)
787
842
  when 3
788
843
  t.send(:compile, {}, ActionView::Base.new, ActionView::CompiledTemplates)
@@ -795,7 +850,7 @@ module Veracode
795
850
 
796
851
  }
797
852
 
798
- puts "Compiled templates: " + ActionView::CompiledTemplates.instance_methods.count.to_s if $options[:verbose]
853
+ puts "Compiled templates: " + ActionView::CompiledTemplates.instance_methods.count.to_s if $options[:verbose] && !@rails6
799
854
 
800
855
  end
801
856
 
@@ -813,6 +868,9 @@ module Veracode
813
868
  lib = "#{part}/#{lib}"
814
869
  lib = lib[0..lib.length-2] if lib[lib.length-1] == '/'
815
870
  begin
871
+ if @rails6 && (lib =~ /node_modules/ || lib == 'debug')
872
+ next
873
+ end
816
874
  if cond_require lib
817
875
  puts "requiring #{lib}" if $options[:verbose]
818
876
  end
@@ -852,9 +910,6 @@ def self.require_rails(gemdir)
852
910
  end
853
911
  end
854
912
 
855
-
856
-
857
-
858
913
  ################################################################################
859
914
  # Subcommands
860
915
  def self.prepare
@@ -906,11 +961,12 @@ end
906
961
  puts "Required rails" if $options[:verbose]
907
962
  end
908
963
 
964
+ @rails6 = Gem::Version.new(Rails.version) >= Gem::Version.new("6.0.0")
909
965
  ## Imitate script/rails
910
966
  # APP_PATH = File.expand_path('config/application')
911
967
  # APP_PATH is already set in bin/veracode
912
968
  #require File.expand_path('../../config/boot', __FILE__)
913
- glob_require "config/boot.rb"
969
+ glob_require "config/boot.rb"
914
970
  #require 'rails/commands'
915
971
  # this will trigger the console to be launched
916
972
  # ARGV.clear
@@ -919,7 +975,7 @@ end
919
975
  # require 'rails/commands'
920
976
 
921
977
  ## Imitate rails/commands when console
922
- if Gem::Version.new(Rails.version) >= Gem::Version.new("5.1.0")
978
+ if @rails6 || Gem::Version.new(Rails.version) >= Gem::Version.new("5.1.0")
923
979
  cond_require 'rails/command.rb'
924
980
  cond_require 'rails/command/actions.rb'
925
981
  cond_require 'rails/command/base.rb'
@@ -933,7 +989,11 @@ end
933
989
 
934
990
  glob_require "config/application.rb"
935
991
 
936
- Rails.application.require_environment! unless $options[:jruby]
992
+ begin
993
+ Rails.application.require_environment! unless $options[:skipenvironment]
994
+ rescue Exception => e
995
+ log_error "Unable to require environment: #{e.message}"
996
+ end
937
997
  # Following line will actually kick off IRB
938
998
  # Rails::Console.start(Rails.application)
939
999
 
@@ -973,13 +1033,26 @@ end
973
1033
  puts "new successful requires? #{any_new.to_s}" if $options[:verbose]
974
1034
  end
975
1035
 
976
- compile_templates
977
-
978
- self.update
979
- self.stats if $options[:verbose]
1036
+ begin
1037
+ if @rails6
1038
+ self.update
1039
+ @view = ActionView::Base.with_empty_template_cache
1040
+ @view_methods = @view.compiled_method_container.instance_methods
1041
+ compile_erb_templates
1042
+ compile_haml_templates
1043
+ self.stats if $options[:verbose]
1044
+ else
1045
+ compile_templates
1046
+ self.update
1047
+ self.stats if $options[:verbose]
1048
+ end
980
1049
 
981
- # Ensure compiled templates are fully disassembled in archive
982
- @baseline_modules.delete(ActionView::CompiledTemplates)
1050
+ # Ensure compiled templates are fully disassembled in archive
1051
+ @baseline_modules.delete(ActionView::CompiledTemplates) unless @rails6
1052
+ rescue Exception => e
1053
+ puts "Unable to compile templates: #{e.message}" if $options[:verbose]
1054
+ log_error "Unable to compile templates: #{e.message}"
1055
+ end
983
1056
 
984
1057
  if $options[:environment]
985
1058
  puts "Processing and disassembling environment"
@@ -994,6 +1067,9 @@ end
994
1067
  puts "Processing and disassembling #{APP_NAME} classes and modules"
995
1068
  safe_baseline_modules = @baseline_modules.each_with_object(Set.new) { |o, s| s << safe_name(o) }
996
1069
  archive(@modules.reject {|o| safe_baseline_modules.include?(safe_name(o))}, true)
1070
+ if @rails6
1071
+ archive_rails6_templates()
1072
+ end
997
1073
  archive_schema
998
1074
 
999
1075
  end
@@ -1003,6 +1079,7 @@ end
1003
1079
  log_error e.message
1004
1080
  log_error e.backtrace.join("\n")
1005
1081
  else
1082
+ puts "Failed to prepare veracode archive. Please see #{@archive_dirname + '/' + @errorlog_filename}."
1006
1083
  raise
1007
1084
  end
1008
1085
  end
@@ -1,4 +1,4 @@
1
1
  module Veracode
2
- VERSION = '1.0.0.alpha18'
3
- ARCHIVE_VERSION = '2012-07-04'
2
+ VERSION = '1.1.0'
3
+ ARCHIVE_VERSION = '2020-06-29'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: veracode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha18
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Veracode
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-10 00:00:00.000000000 Z
11
+ date: 2021-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '1.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '1.3'
27
27
  description: Prepares your Ruby on Rails app for submission to Veracode.
28
28
  email: devcontact@veracode.com
29
29
  executables:
@@ -39,7 +39,7 @@ files:
39
39
  homepage: http://veracode.com/
40
40
  licenses: []
41
41
  metadata: {}
42
- post_install_message:
42
+ post_install_message:
43
43
  rdoc_options: []
44
44
  require_paths:
45
45
  - lib
@@ -50,13 +50,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
50
50
  version: 1.9.3.0
51
51
  required_rubygems_version: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">"
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: 1.3.1
55
+ version: '0'
56
56
  requirements: []
57
- rubyforge_project:
58
- rubygems_version: 2.7.8
59
- signing_key:
57
+ rubygems_version: 3.0.8
58
+ signing_key:
60
59
  specification_version: 4
61
60
  summary: Command line tool for preparing your Ruby on Rails app for submission to
62
61
  Veracode