veracode 1.0.0.alpha17 → 1.0.2

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/veracode.rb +128 -46
  3. data/lib/veracode/version.rb +2 -2
  4. metadata +12 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5cb7c4ca35c0ba950a80cd3128abe49464b68357d59528a09af7e17998bf2d9
4
- data.tar.gz: fea0072496133717cc1f109cfe987eee7ee6099443c6032efd594c823338353f
3
+ metadata.gz: 76b474d0295eea0d4627632242cae9e9af1e897af7ac846776b035cb58a0c89b
4
+ data.tar.gz: 65b8f267cbbba773839d7b6980f6de4c85dfdd2e559d793bcb63edc0c8140a99
5
5
  SHA512:
6
- metadata.gz: 955ceacaea17f867fbbacbeb50607cdf71c4392474e71d73c5a3ba2c585139fef63ea6b73cc1fd6713a078e76c2855465f65a9a567d066a654989a3fdac9caf7
7
- data.tar.gz: 0700d727fe2b5a19ebec8ba118e6d4438473e3234ffbd3fa26520f7cce054fd9fd5cd5c20d1d09e550bbcb417708cccf1019ad24a784f3e6b59a8fbea30de1a9
6
+ metadata.gz: a29acbc7213e4f7dd56cbbdeb8fb15bdeb35162955b4ad2fa6c3aaabc557cc7ed2523f562e5c97731fe7ebc44224c772342bcf939001ec3a3ef83a0b3a51ddd9
7
+ data.tar.gz: 86d3da0ae6a302e1df67008f40203b0d2f1fc8c003c7ac109e808f78a8b17ef1df01f8bb2e9aeebafd4df1628822a09bb33fc077f203278ce39f6619135bddf8
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,23 +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
- "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
302
306
  end
307
+ when o.is_a?(Method), o.is_a?(UnboundMethod)
308
+ o.name.to_s
309
+ else
310
+ o.to_s
303
311
  end
304
- when o.is_a?(Method), o.is_a?(UnboundMethod)
305
- o.name.to_s
306
- else
307
- 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
308
314
  end
309
315
  end
310
316
 
@@ -396,8 +402,8 @@ module Veracode
396
402
 
397
403
  if with_disasm
398
404
  insns = RubyVM::InstructionSequence.disassemble(m)
399
- formatted += ( (insns.nil? || insns.empty?) ?
400
- "== disasm\n== end disasm\n" :
405
+ formatted += ( (insns.nil? || insns.empty? || insns[/.*#{@expanded_app_dir}.*/].nil?) ?
406
+ "\n" :
401
407
  "#{insns}== end disasm\n"
402
408
  )
403
409
  end
@@ -540,7 +546,14 @@ module Veracode
540
546
  end
541
547
 
542
548
  def self.object_contents(o, with_disasm=true)
543
- return "" unless !o.nil? && o.is_a?(Object)
549
+ begin
550
+ return "" unless !o.nil?
551
+ rescue Exception => e
552
+ log_error "Error testing #{o} with nil?. Probable monkey patching. #{e.message}"
553
+ return "" if o == nil
554
+ end
555
+
556
+ return "" unless o.is_a?(Object)
544
557
 
545
558
  puts " object contents" if $options[:verbose]
546
559
 
@@ -584,12 +597,28 @@ module Veracode
584
597
  ##############################################################################
585
598
  # Archiving Objects
586
599
  def self.archive(objects, with_disasm=true)
587
- objects = objects - [
588
- Veracode,
589
- Veracode::ActiveRecord,
590
- Veracode::ActiveRecord::Model,
591
- Veracode::ActiveRecord::Schema,
592
- ]
600
+ veracode_artifacts = Set[
601
+ safe_name(Veracode),
602
+ safe_name(Veracode::ActiveRecord),
603
+ safe_name(Veracode::ActiveRecord::Model),
604
+ safe_name(Veracode::ActiveRecord::Schema)
605
+ ]
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
593
622
 
594
623
  if $options[:verbose]
595
624
  puts "Archiving #{objects.count.to_s} objects" + (with_disasm ? " with disassembly" : "")
@@ -598,18 +627,47 @@ module Veracode
598
627
 
599
628
  objects.sort_by {|o| safe_name(o) }.each do |o|
600
629
 
601
- 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]
602
632
 
603
- 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" +
604
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
605
636
  ( o.is_a?(Module) ? module_header(o) : "") + # included modules
606
- ( (o.is_a?(Object) && !o.nil?) ? object_contents(o, with_disasm) : "") +
637
+ ( o.is_a?(Object) ? object_contents(o, with_disasm) : "") +
607
638
  ( o.is_a?(Module) ? module_contents(o, with_disasm) : "") +
608
639
  "end#{o.class.to_s.downcase}\n" +
609
640
  "\n"
610
641
  end
611
642
  end
612
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
+
613
671
 
614
672
  def self.compile_templates
615
673
 
@@ -672,9 +730,11 @@ module Veracode
672
730
  end
673
731
  }
674
732
 
675
- puts "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates" if $options[:verbose]
676
- log_error "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates"
677
- 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
678
738
  end
679
739
 
680
740
  def self.compile_erb_templates
@@ -717,7 +777,9 @@ module Veracode
717
777
  )
718
778
 
719
779
  case t.method(:compile).arity
720
- when 2 # Rails 3.1.0+
780
+ when 1 # Rails 6
781
+ t.send(:compile, @view)
782
+ when 2 # Rails 3.1.0+
721
783
  t.send(:compile, ActionView::Base.new, ActionView::CompiledTemplates)
722
784
  when 3
723
785
  t.send(:compile, {}, ActionView::Base.new, ActionView::CompiledTemplates)
@@ -730,7 +792,7 @@ module Veracode
730
792
 
731
793
  }
732
794
 
733
- 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
734
796
 
735
797
  end
736
798
 
@@ -773,7 +835,9 @@ module Veracode
773
835
  )
774
836
 
775
837
  case t.method(:compile).arity
776
- when 2 # Rails 3.1.0+
838
+ when 1 # Rails 6
839
+ t.send(:compile, @view)
840
+ when 2 # Rails 3.1.0+
777
841
  t.send(:compile, ActionView::Base.new, ActionView::CompiledTemplates)
778
842
  when 3
779
843
  t.send(:compile, {}, ActionView::Base.new, ActionView::CompiledTemplates)
@@ -786,7 +850,7 @@ module Veracode
786
850
 
787
851
  }
788
852
 
789
- 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
790
854
 
791
855
  end
792
856
 
@@ -804,6 +868,9 @@ module Veracode
804
868
  lib = "#{part}/#{lib}"
805
869
  lib = lib[0..lib.length-2] if lib[lib.length-1] == '/'
806
870
  begin
871
+ if @rails6 && (lib =~ /node_modules/ || lib == 'debug')
872
+ next
873
+ end
807
874
  if cond_require lib
808
875
  puts "requiring #{lib}" if $options[:verbose]
809
876
  end
@@ -843,9 +910,6 @@ def self.require_rails(gemdir)
843
910
  end
844
911
  end
845
912
 
846
-
847
-
848
-
849
913
  ################################################################################
850
914
  # Subcommands
851
915
  def self.prepare
@@ -897,11 +961,12 @@ end
897
961
  puts "Required rails" if $options[:verbose]
898
962
  end
899
963
 
964
+ @rails6 = Gem::Version.new(Rails.version) >= Gem::Version.new("6.0.0")
900
965
  ## Imitate script/rails
901
966
  # APP_PATH = File.expand_path('config/application')
902
967
  # APP_PATH is already set in bin/veracode
903
968
  #require File.expand_path('../../config/boot', __FILE__)
904
- glob_require "config/boot.rb"
969
+ glob_require "config/boot.rb"
905
970
  #require 'rails/commands'
906
971
  # this will trigger the console to be launched
907
972
  # ARGV.clear
@@ -910,7 +975,7 @@ end
910
975
  # require 'rails/commands'
911
976
 
912
977
  ## Imitate rails/commands when console
913
- 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")
914
979
  cond_require 'rails/command.rb'
915
980
  cond_require 'rails/command/actions.rb'
916
981
  cond_require 'rails/command/base.rb'
@@ -964,13 +1029,26 @@ end
964
1029
  puts "new successful requires? #{any_new.to_s}" if $options[:verbose]
965
1030
  end
966
1031
 
967
- compile_templates
968
-
969
- self.update
970
- self.stats if $options[:verbose]
1032
+ begin
1033
+ if @rails6
1034
+ self.update
1035
+ @view = ActionView::Base.with_empty_template_cache
1036
+ @view_methods = @view.compiled_method_container.instance_methods
1037
+ compile_erb_templates
1038
+ compile_haml_templates
1039
+ self.stats if $options[:verbose]
1040
+ else
1041
+ compile_templates
1042
+ self.update
1043
+ self.stats if $options[:verbose]
1044
+ end
971
1045
 
972
- # Ensure compiled templates are fully disassembled in archive
973
- @baseline_modules.delete(ActionView::CompiledTemplates)
1046
+ # Ensure compiled templates are fully disassembled in archive
1047
+ @baseline_modules.delete(ActionView::CompiledTemplates) unless @rails6
1048
+ rescue Exception => e
1049
+ puts "Unable to compile templates: #{e.message}" if $options[:verbose]
1050
+ log_error "Unable to compile templates: #{e.message}"
1051
+ end
974
1052
 
975
1053
  if $options[:environment]
976
1054
  puts "Processing and disassembling environment"
@@ -983,7 +1061,11 @@ end
983
1061
  archive(@baseline_modules, false)
984
1062
  add_to_archive "\n# Phase 3 - App disassembly\n"
985
1063
  puts "Processing and disassembling #{APP_NAME} classes and modules"
986
- archive(@modules - @baseline_modules, true)
1064
+ safe_baseline_modules = @baseline_modules.each_with_object(Set.new) { |o, s| s << safe_name(o) }
1065
+ archive(@modules.reject {|o| safe_baseline_modules.include?(safe_name(o))}, true)
1066
+ if @rails6
1067
+ archive_rails6_templates()
1068
+ end
987
1069
  archive_schema
988
1070
 
989
1071
  end
@@ -1,4 +1,4 @@
1
1
  module Veracode
2
- VERSION = '1.0.0.alpha17'
3
- ARCHIVE_VERSION = '2012-07-04'
2
+ VERSION = '1.0.2'
3
+ ARCHIVE_VERSION = '2020-06-29'
4
4
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: veracode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha17
4
+ version: 1.0.2
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-05-07 00:00:00.000000000 Z
11
+ date: 2021-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
15
15
  requirement: !ruby/object:Gem::Requirement
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.1.4
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