veracode 1.0.0.alpha12 → 1.0.0.alpha19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9ffaeba52a85aff23949c824adca1d68314d41c0
4
- data.tar.gz: c6f539d71f08767169996d16fbcd997d04658af7
2
+ SHA256:
3
+ metadata.gz: d1ea5fea7f60db50f74f9ff774a1a548d9aea957bfb78ba4daab6a2d8d3d53c2
4
+ data.tar.gz: 70ff0d73076ec7e4f652627d1edc8fdf211659bca3eda9af062d327a85c606fc
5
5
  SHA512:
6
- metadata.gz: f48037a017dba0acf886e1bfdfd6abd4143ece680195568c412fe0344643a62252f9da9da269a1580ced4d663276f9299954a94552bbc6766b832e8e2639758e
7
- data.tar.gz: 2a54b797348504a26cfd322783c64ff8ba639afa75be29794fd96bdb063f997d71a479ca04dc14e07bd7de9261195ac977ca1edc56741244e1c9f1a1b223ec15
6
+ metadata.gz: fcad070be483f3316862afca54b4e4e2b91cd09a8c6979c048e483c1f5fb629d8bc4b7dc8c12499b2cedcfa05f2faade67cb17fe8d3a63a8345daa71c403e234
7
+ data.tar.gz: a331deeba1ca33939dd9f78a6d8554b5049b67566b90cab4af6ac7c9a85633bf1680c137d6628916f9357d819e04b5bf48a48a4f1f525d55f31c2dc48c17c773
data/bin/veracode CHANGED
@@ -23,8 +23,13 @@ require 'veracode/version'
23
23
  $options = {
24
24
  :archive_source => true,
25
25
  :include_inherited => false,
26
- :jruby => false,
27
26
  :environment => false,
27
+ :verbose => false,
28
+ :jruby => false,
29
+ :skipactiverecord => false,
30
+ :skipactionview => false,
31
+ :skipsprockets => false,
32
+ :snapshot => false
28
33
  }
29
34
 
30
35
  subcommand = ARGV.shift
@@ -61,6 +66,10 @@ case subcommand
61
66
  $DEBUG = true
62
67
  end
63
68
 
69
+ opts.on("--debug-snapshot", "Generate a snapshot of the prepare state for Veracode debugging.") do
70
+ $options[:snapshot] = true
71
+ end
72
+
64
73
  end.parse!
65
74
 
66
75
  Veracode.prepare
data/lib/veracode.rb CHANGED
@@ -202,7 +202,11 @@ module Veracode
202
202
  exit
203
203
  end
204
204
 
205
- puts "Please upload #{@archive_filename}"
205
+ if $options[:snapshot]
206
+ puts "Please provide #{@archive_filename} to veracode for further investigation."
207
+ else
208
+ puts "Please upload #{@archive_filename}"
209
+ end
206
210
  end
207
211
 
208
212
  def self.cleanup
@@ -284,23 +288,27 @@ module Veracode
284
288
  end
285
289
 
286
290
  def self.safe_name(o)
287
- case
288
- when o == ActiveSupport::TimeWithZone
289
- "ActiveSupport::TimeWithZone"
290
- when o.is_a?(Module)
291
- begin
292
- ( o.name.nil? ? o.to_s : o.name.to_s )
293
- rescue
291
+ begin
292
+ case
293
+ when o == ActiveSupport::TimeWithZone
294
+ "ActiveSupport::TimeWithZone"
295
+ when o.is_a?(Module)
294
296
  begin
295
- ( o.nil? ? "nil" : o.to_s )
297
+ ( o.name.nil? ? o.to_s : o.name.to_s )
296
298
  rescue
297
- "nil"
299
+ begin
300
+ ( o.nil? ? "nil" : o.to_s )
301
+ rescue
302
+ ( o == nil ? "nil" : o.to_s ) # in case of monkey patched nil?
303
+ end
298
304
  end
305
+ when o.is_a?(Method), o.is_a?(UnboundMethod)
306
+ o.name.to_s
307
+ else
308
+ o.to_s
299
309
  end
300
- when o.is_a?(Method), o.is_a?(UnboundMethod)
301
- o.name.to_s
302
- else
303
- o.to_s
310
+ rescue
311
+ "Veracode" #should result in this being dropped from the archive since we can't get a safe name for it
304
312
  end
305
313
  end
306
314
 
@@ -419,20 +427,25 @@ module Veracode
419
427
  ##############################################################################
420
428
  # Archiving Headers
421
429
  def self.class_header(c)
422
- return "" unless c.is_a? Class
430
+ begin
431
+ return "" unless c.is_a? Class
423
432
 
424
- puts " class header" if $options[:verbose]
433
+ puts " class header" if $options[:verbose]
425
434
 
426
- case
427
- when c.superclass.nil? # this should only happen for BasicObject
435
+ case
436
+ when c.superclass.nil? # this should only happen for BasicObject
437
+ return ""
438
+ when c.superclass.name.nil? # in case the parent is anonymous
439
+ name = c.superclass.to_s.dump
440
+ else
441
+ name = c.superclass.name.dump
442
+ end
443
+
444
+ "superclass #{name}\n"
445
+ rescue Exception => e
446
+ log_error e.message
428
447
  return ""
429
- when c.superclass.name.nil? # in case the parent is anonymous
430
- name = c.superclass.to_s.dump
431
- else
432
- name = c.superclass.name.dump
433
448
  end
434
-
435
- "superclass #{name}\n"
436
449
  end
437
450
 
438
451
  def self.module_header(m)
@@ -443,7 +456,7 @@ module Veracode
443
456
  formatted_contents = ""
444
457
 
445
458
  begin
446
- fomatted_contents += ( m.included_modules.count > 0 ?
459
+ formatted_contents += ( m.included_modules.count > 0 ?
447
460
  m.included_modules.map {|m| "include #{m.inspect.dump}\n" }.join :
448
461
  ""
449
462
  )
@@ -509,51 +522,70 @@ module Veracode
509
522
  # m.respond_to?(:global_variables) was throwing exceptions
510
523
  end
511
524
 
512
- %w[ public protected private ].each {|p|
513
- get_methods = (p + "_instance_methods").to_sym
514
- if m.respond_to?(get_methods) && m.__send__(get_methods, $options[:include_inherited]).count > 0
515
- m.__send__(get_methods, $options[:include_inherited]).each do |m_symbol|
516
- begin
517
- method = m.instance_method(m_symbol)
518
- formatted_contents += format_method(method, "#{p.to_s}_instance", with_disasm)
519
- rescue Exception => e
520
- log_error "Error archiving #{p.to_s} instance method #{m_symbol.to_s.dump}: #{e.message}"
525
+ begin
526
+ %w[ public protected private ].each {|p|
527
+ get_methods = (p + "_instance_methods").to_sym
528
+ if m.respond_to?(get_methods) && m.__send__(get_methods, $options[:include_inherited]).count > 0
529
+ m.__send__(get_methods, $options[:include_inherited]).each do |m_symbol|
530
+ begin
531
+ method = m.instance_method(m_symbol)
532
+ formatted_contents += format_method(method, "#{p.to_s}_instance", with_disasm)
533
+ rescue Exception => e
534
+ log_error "Error archiving #{p.to_s} instance method #{m_symbol.to_s.dump}: #{e.message}"
535
+ end
521
536
  end
522
537
  end
523
- end
524
- }
538
+ }
539
+ rescue Exception => e
540
+ # m.respond_to?(get_methods)
541
+ end
525
542
 
526
543
  formatted_contents
527
544
  end
528
545
 
529
546
  def self.object_contents(o, with_disasm=true)
530
- return "" unless o.is_a? Object
547
+ begin
548
+ return "" unless !o.nil?
549
+ rescue Exception => e
550
+ log_error "Error testing #{o} with nil?. Probable monkey patching. #{e.message}"
551
+ return "" if o == nil
552
+ end
553
+
554
+ return "" unless o.is_a?(Object)
531
555
 
532
556
  puts " object contents" if $options[:verbose]
533
557
 
534
558
  formatted_contents = ""
535
-
536
- if o.respond_to?(:instance_variables) && o.instance_variables.count > 0
537
- o.instance_variables.each do |v_symbol|
538
- begin
539
- v = o.instance_variable_get(v_symbol)
540
- formatted_contents += format_variable(v_symbol, v, "instance")
541
- rescue Exception => e
542
- log_error "Error archiving instance variable #{v_symbol.to_s.dump}: #{e.message}"
543
- formatted_contents += format_variable(v_symbol, :veracode_nil, "instance")
559
+
560
+ begin
561
+ if o.respond_to?(:instance_variables) && o.instance_variables.count > 0
562
+ o.instance_variables.each do |v_symbol|
563
+ begin
564
+ v = o.instance_variable_get(v_symbol)
565
+ formatted_contents += format_variable(v_symbol, v, "instance")
566
+ rescue Exception => e
567
+ log_error "Error archiving instance variable #{v_symbol.to_s.dump}: #{e.message}"
568
+ formatted_contents += format_variable(v_symbol, :veracode_nil, "instance")
569
+ end
544
570
  end
545
571
  end
572
+ rescue Exception => e
573
+ log_error "Error getting :instance_variables for object #{o}: #{e.message}"
546
574
  end
547
575
 
548
- if o.respond_to?(:singleton_methods) && o.singleton_methods($options[:include_inherited]).count > 0
549
- o.singleton_methods($options[:include_inherited]).each do |m_symbol|
550
- begin
551
- m = o.method(m_symbol)
552
- formatted_contents += format_method(m, "singleton", with_disasm)
553
- rescue Exception => e
554
- log_error "Error archiving singleton method #{m_symbol.to_s.dump}: #{e.message}"
576
+ begin
577
+ if o.respond_to?(:singleton_methods) && o.singleton_methods($options[:include_inherited]).count > 0
578
+ o.singleton_methods($options[:include_inherited]).each do |m_symbol|
579
+ begin
580
+ m = o.method(m_symbol)
581
+ formatted_contents += format_method(m, "singleton", with_disasm)
582
+ rescue Exception => e
583
+ log_error "Error archiving singleton method #{m_symbol.to_s.dump}: #{e.message}"
584
+ end
555
585
  end
556
586
  end
587
+ rescue Exception => e
588
+ log_error "Error getting :singleton_methods for object #{o}: #{e.message}"
557
589
  end
558
590
 
559
591
  formatted_contents
@@ -563,13 +595,13 @@ module Veracode
563
595
  ##############################################################################
564
596
  # Archiving Objects
565
597
  def self.archive(objects, with_disasm=true)
566
-
567
- objects = objects - [
568
- Veracode,
569
- Veracode::ActiveRecord,
570
- Veracode::ActiveRecord::Model,
571
- Veracode::ActiveRecord::Schema,
572
- ]
598
+ veracode_artifacts = Set[
599
+ safe_name(Veracode),
600
+ safe_name(Veracode::ActiveRecord),
601
+ safe_name(Veracode::ActiveRecord::Model),
602
+ safe_name(Veracode::ActiveRecord::Schema)
603
+ ]
604
+ objects = objects.reject { |o| veracode_artifacts.include?(safe_name(o)) }
573
605
 
574
606
  if $options[:verbose]
575
607
  puts "Archiving #{objects.count.to_s} objects" + (with_disasm ? " with disassembly" : "")
@@ -581,17 +613,13 @@ module Veracode
581
613
  puts "archiving #{o.class.to_s.downcase} #{quote(safe_name(o))}" if $options[:verbose]
582
614
 
583
615
  add_to_archive "#{o.class.to_s.downcase} #{quote(safe_name(o))}\n" +
584
-
585
- ( o.is_a?(Class) ? class_header(o) : "") + # superclass
586
- ( o.is_a?(Module) ? module_header(o) : "") + # included modules
587
-
588
- ( o.is_a?(Object) ? object_contents(o, with_disasm) : "") +
589
- ( o.is_a?(Module) ? module_contents(o, with_disasm) : "") +
590
-
591
- "end#{o.class.to_s.downcase}\n" +
592
- "\n"
616
+ ( o.is_a?(Class) ? class_header(o) : "") + # superclass
617
+ ( o.is_a?(Module) ? module_header(o) : "") + # included modules
618
+ ( o.is_a?(Object) ? object_contents(o, with_disasm) : "") +
619
+ ( o.is_a?(Module) ? module_contents(o, with_disasm) : "") +
620
+ "end#{o.class.to_s.downcase}\n" +
621
+ "\n"
593
622
  end
594
-
595
623
  end
596
624
 
597
625
 
@@ -639,7 +667,11 @@ module Veracode
639
667
 
640
668
  assigns = {}
641
669
  view = ActionView::Base.new(view_paths, assigns)
642
- controller_view = ApplicationController.new.view_context
670
+ begin
671
+
672
+ rescue Exception => e
673
+ log_error "Unable to get controller view context (#{e.message})"
674
+ end
643
675
 
644
676
  templates.each { |template|
645
677
  puts "Compiling template #{template}" if $options[:verbose]
@@ -879,9 +911,9 @@ end
879
911
 
880
912
  ## Imitate script/rails
881
913
  # APP_PATH = File.expand_path('config/application')
882
- # APP_PATH is already set in bin/veracode
914
+ # APP_PATH is already set in bin/veracode
883
915
  #require File.expand_path('../../config/boot', __FILE__)
884
- glob_require "config/boot.rb"
916
+ glob_require "config/boot.rb"
885
917
  #require 'rails/commands'
886
918
  # this will trigger the console to be launched
887
919
  # ARGV.clear
@@ -890,7 +922,16 @@ end
890
922
  # require 'rails/commands'
891
923
 
892
924
  ## Imitate rails/commands when console
893
- cond_require 'rails/commands/console.rb'
925
+ if Gem::Version.new(Rails.version) >= Gem::Version.new("5.1.0")
926
+ cond_require 'rails/command.rb'
927
+ cond_require 'rails/command/actions.rb'
928
+ cond_require 'rails/command/base.rb'
929
+ cond_require 'rails/command/behavior.rb'
930
+ cond_require 'rails/command/environment_argument.rb'
931
+ cond_require 'rails/commands/console/console_command.rb'
932
+ else
933
+ cond_require 'rails/commands/console.rb'
934
+ end
894
935
  # require APP_PATH # => config/application.rb
895
936
 
896
937
  glob_require "config/application.rb"
@@ -926,35 +967,47 @@ end
926
967
 
927
968
  puts "Phase 3 - Imitate Rails" if $options[:verbose]
928
969
 
929
- any_new = true
930
- while any_new
931
- any_new = false
932
- any_new |= glob_require "lib/**/*.rb"
933
- any_new |= glob_require "app/**/*.rb"
934
- puts "new successful requires? #{any_new.to_s}" if $options[:verbose]
935
- end
970
+ begin
971
+ any_new = true
972
+ while any_new
973
+ any_new = false
974
+ any_new |= glob_require "lib/**/*.rb"
975
+ any_new |= glob_require "app/**/*.rb"
976
+ puts "new successful requires? #{any_new.to_s}" if $options[:verbose]
977
+ end
936
978
 
937
- compile_templates
979
+ compile_templates
938
980
 
939
- self.update
940
- self.stats if $options[:verbose]
981
+ self.update
982
+ self.stats if $options[:verbose]
941
983
 
942
- # Ensure compiled templates are fully disassembled in archive
943
- @baseline_modules.delete(ActionView::CompiledTemplates)
984
+ # Ensure compiled templates are fully disassembled in archive
985
+ @baseline_modules.delete(ActionView::CompiledTemplates)
944
986
 
945
- if $options[:environment]
946
- puts "Processing and disassembling environment"
947
- archive(@modules.reject {|o| safe_name(o) =~ /^#<(Class|Module):0x[0-9a-f]+>/i }
948
- .reject {|o| safe_name(o) =~ /^Veracode/ }
949
- .reject {|o| safe_name(o) =~ /^EmptyRails/ }
950
- .reject {|o| safe_name(o) =~ /^ActionView::CompiledTemplates$/ }, false)
951
- else
952
- puts "Processing Ruby and Rails classes and modules"
953
- archive(@baseline_modules, false)
954
- add_to_archive "\n# Phase 3 - App disassembly\n"
955
- puts "Processing and disassembling #{APP_NAME} classes and modules"
956
- archive(@modules - @baseline_modules, true)
957
- archive_schema
987
+ if $options[:environment]
988
+ puts "Processing and disassembling environment"
989
+ archive(@modules.reject {|o| safe_name(o) =~ /^#<(Class|Module):0x[0-9a-f]+>/i }
990
+ .reject {|o| safe_name(o) =~ /^Veracode/ }
991
+ .reject {|o| safe_name(o) =~ /^EmptyRails/ }
992
+ .reject {|o| safe_name(o) =~ /^ActionView::CompiledTemplates$/ }, false)
993
+ else
994
+ puts "Processing Ruby and Rails classes and modules"
995
+ archive(@baseline_modules, false)
996
+ add_to_archive "\n# Phase 3 - App disassembly\n"
997
+ puts "Processing and disassembling #{APP_NAME} classes and modules"
998
+ safe_baseline_modules = @baseline_modules.each_with_object(Set.new) { |o, s| s << safe_name(o) }
999
+ archive(@modules.reject {|o| safe_baseline_modules.include?(safe_name(o))}, true)
1000
+ archive_schema
1001
+
1002
+ end
1003
+
1004
+ rescue Exception => e
1005
+ if $options[:snapshot]
1006
+ log_error e.message
1007
+ log_error e.backtrace.join("\n")
1008
+ else
1009
+ raise
1010
+ end
958
1011
  end
959
1012
 
960
1013
  ## /phase 3 - require app
@@ -1,4 +1,4 @@
1
1
  module Veracode
2
- VERSION = '1.0.0.alpha12'
2
+ VERSION = '1.0.0.alpha19'
3
3
  ARCHIVE_VERSION = '2012-07-04'
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.alpha12
4
+ version: 1.0.0.alpha19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Veracode
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-05 00:00:00.000000000 Z
11
+ date: 2019-11-01 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:
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  version: 1.3.1
56
56
  requirements: []
57
57
  rubyforge_project:
58
- rubygems_version: 2.6.11
58
+ rubygems_version: 2.7.8
59
59
  signing_key:
60
60
  specification_version: 4
61
61
  summary: Command line tool for preparing your Ruby on Rails app for submission to