bundler-audit 0.3.0 → 0.3.1

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.travis.yml +1 -0
  4. data/ChangeLog.md +10 -0
  5. data/README.md +5 -1
  6. data/Rakefile +8 -0
  7. data/data/ruby-advisory-db.ts +1 -0
  8. data/data/ruby-advisory-db/CONTRIBUTORS.md +9 -0
  9. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100524.yml +20 -0
  10. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100525.yml +21 -0
  11. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100526.yml +27 -0
  12. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100527.yml +24 -0
  13. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100528.yml +22 -0
  14. data/data/ruby-advisory-db/gems/actionpack/OSVDB-103439.yml +24 -0
  15. data/data/ruby-advisory-db/gems/actionpack/OSVDB-103440.yml +22 -0
  16. data/data/ruby-advisory-db/gems/activerecord/OSVDB-103438.yml +23 -0
  17. data/data/ruby-advisory-db/gems/arabic-prawn/OSVDB-104365.yml +15 -0
  18. data/data/ruby-advisory-db/gems/cocaine/OSVDB-98835.yml +2 -2
  19. data/data/ruby-advisory-db/gems/crack/OSVDB-90742.yml +1 -1
  20. data/data/ruby-advisory-db/gems/curl/OSVDB-91230.yml +1 -1
  21. data/data/ruby-advisory-db/gems/echor/OSVDB-102129.yml +11 -0
  22. data/data/ruby-advisory-db/gems/echor/OSVDB-102130.yml +10 -0
  23. data/data/ruby-advisory-db/gems/gitlab-grit/OSVDB-99370.yml +14 -0
  24. data/data/ruby-advisory-db/gems/httparty/OSVDB-90741.yml +3 -8
  25. data/data/ruby-advisory-db/gems/i18n/OSVDB-100528.yml +17 -0
  26. data/data/ruby-advisory-db/gems/nokogiri/OSVDB-101179.yml +12 -0
  27. data/data/ruby-advisory-db/gems/nokogiri/OSVDB-101458.yml +15 -0
  28. data/data/ruby-advisory-db/gems/nori/OSVDB-90196.yml +1 -1
  29. data/data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99693.yml +22 -0
  30. data/data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99888.yml +17 -0
  31. data/data/ruby-advisory-db/gems/paperclip/OSVDB-103151.yml +13 -0
  32. data/data/ruby-advisory-db/gems/paratrooper-newrelic/OSVDB-101839.yml +12 -0
  33. data/data/ruby-advisory-db/gems/paratrooper-pingdom/OSVDB-101847.yml +13 -0
  34. data/data/ruby-advisory-db/gems/rack/OSVDB-89939.yml +1 -1
  35. data/data/ruby-advisory-db/gems/rbovirt/OSVDB-104080.yml +20 -0
  36. data/data/ruby-advisory-db/gems/rgpg/OSVDB-95948.yml +2 -1
  37. data/data/ruby-advisory-db/gems/sfpagent/OSVDB-105971.yml +13 -0
  38. data/data/ruby-advisory-db/gems/spree/OSVDB-91216.yml +3 -2
  39. data/data/ruby-advisory-db/gems/spree/OSVDB-91217.yml +3 -2
  40. data/data/ruby-advisory-db/gems/spree/OSVDB-91218.yml +3 -2
  41. data/data/ruby-advisory-db/gems/spree/OSVDB-91219.yml +3 -2
  42. data/data/ruby-advisory-db/gems/sprout/OSVDB-100598.yml +14 -0
  43. data/data/ruby-advisory-db/gems/webbynode/OSVDB-100920.yml +11 -0
  44. data/data/ruby-advisory-db/gems/will_paginate/OSVDB-101138.yml +15 -0
  45. data/data/ruby-advisory-db/spec/advisory_example.rb +3 -3
  46. data/data/ruby-advisory-db/spec/gems_spec.rb +3 -4
  47. data/gemspec.yml +1 -0
  48. data/lib/bundler/audit.rb +1 -1
  49. data/lib/bundler/audit/advisory.rb +1 -1
  50. data/lib/bundler/audit/cli.rb +5 -4
  51. data/lib/bundler/audit/database.rb +6 -3
  52. data/lib/bundler/audit/version.rb +2 -2
  53. data/spec/advisory_spec.rb +27 -2
  54. data/spec/bundle/secure/Gemfile +1 -1
  55. data/spec/database_spec.rb +58 -1
  56. data/spec/fixtures/not_a_hash.yml +2 -0
  57. data/spec/integration_spec.rb +10 -69
  58. data/spec/spec_helper.rb +40 -0
  59. metadata +44 -3
@@ -0,0 +1,15 @@
1
+ ---
2
+ gem: nokogiri
3
+ cve: 2013-6461
4
+ osvdb: 101458
5
+ url: http://www.osvdb.org/show/osvdb/101458
6
+ title: Nokogiri Gem for Ruby External Entity (XXE) Expansion Remote DoS
7
+ date: 2013-12-14
8
+ description: Nokogiri gem for Ruby contains an flaw that is triggered during the parsing of XML data.
9
+ The issue is due to an incorrectly configured XML parser accepting XML external entities from
10
+ an untrusted source. By sending specially crafted XML data, a remote attacker can cause an infinite
11
+ loop and crash the program.
12
+ cvss_v2:
13
+ patched_versions:
14
+ - ~> 1.5.11
15
+ - ">= 1.6.1"
@@ -11,7 +11,7 @@ description: |
11
11
  to execute arbitrary code. This vulnerability has to do with type casting
12
12
  during parsing, and is related to CVE-2013-0156.
13
13
 
14
- cvss_v2: 10.0
14
+ cvss_v2: 7.5
15
15
 
16
16
  patched_versions:
17
17
  - ~> 1.0.3
@@ -0,0 +1,22 @@
1
+ ---
2
+ gem: omniauth-facebook
3
+ cve: 2013-4562
4
+ osvdb: 99693
5
+ url: http://www.osvdb.org/show/osvdb/99693
6
+ title: omniauth-facebook Gem for Ruby Unspecified CSRF
7
+ date: 2013-11-12
8
+
9
+ description: |
10
+ omniauth-facebook Gem for Ruby contains a flaw as HTTP requests do not
11
+ require multiple steps, explicit confirmation, or a unique token when
12
+ performing certain sensitive actions. By tricking a user into following
13
+ a specially crafted link, a context-dependent attacker can perform a
14
+ Cross-Site Request Forgery (CSRF / XSRF) attack causing the victim to
15
+ perform an unspecified action.
16
+
17
+ cvss_v2: 6.8
18
+
19
+ patched_versions:
20
+ - ">= 1.5.0"
21
+ unaffected_versions:
22
+ - "<= 1.4.0"
@@ -0,0 +1,17 @@
1
+ ---
2
+ gem: omniauth-facebook
3
+ cve: 2013-4593
4
+ osvdb: 99888
5
+ url: http://www.osvdb.org/show/osvdb/99888
6
+ title: omniauth-facebook Gem for Ruby Insecure Access Token Handling Authentication Bypass
7
+ date: 2013-11-14
8
+
9
+ description: |
10
+ omniauth-facebook Gem for Ruby contains a flaw that is due to the application
11
+ supporting passing the access token via the URL. This may allow a remote
12
+ attacker to bypass authentication and authenticate as another user.
13
+
14
+ cvss_v2: 6.8
15
+
16
+ patched_versions:
17
+ - ">= 1.5.1"
@@ -0,0 +1,13 @@
1
+ ---
2
+ gem: paperclip
3
+ osvdb: 103151
4
+ url: http://osvdb.org/show/osvdb/103151
5
+ title: Paperclip Gem for Ruby contains a flaw
6
+ date: 2014-01-31
7
+ description: Paperclip Gem for Ruby contains a flaw that is due to the application failing to properly
8
+ validate the file extension, instead only validating the Content-Type header during file uploads.
9
+ This may allow a remote attacker to bypass restrictions on file types for uploaded files by
10
+ spoofing the content-type.
11
+ cvss_v2:
12
+ patched_versions:
13
+ - ">= 4.0.0"
@@ -0,0 +1,12 @@
1
+ ---
2
+ gem: paratrooper-newrelic
3
+ cve: 2014-1234
4
+ osvdb: 101839
5
+ url: http://www.osvdb.org/show/osvdb/101839
6
+ title: Paratrooper-newrelic Gem for Ruby contains a flaw
7
+ date: 2014-01-08
8
+ description: Paratrooper-newrelic Gem for Ruby contains a flaw in /lib/paratrooper-newrelic.rb.
9
+ The issue is triggered when the script exposes the API key, allowing a local attacker to
10
+ gain access to it by monitoring the process tree.
11
+ cvss_v2: 2.1
12
+ patched_versions:
@@ -0,0 +1,13 @@
1
+ ---
2
+ gem: paratrooper-pingdom
3
+ cve: 2014-1233
4
+ osvdb: 101847
5
+ url: http://www.osvdb.org/show/osvdb/101847
6
+ title: Paratrooper-pingdom Gem for Ruby contains a flaw
7
+ date: 2013-12-26
8
+ description: paratrooper-pingdom Gem for Ruby contains a flaw in /lib/paratrooper-pingdom.rb.
9
+ The issue is triggered when the script exposes API login credentials, allowing a local
10
+ attacker to gain access to the API key, username, and password for the API login by
11
+ monitoring the process tree.
12
+ cvss_v2: 2.1
13
+ patched_versions:
@@ -14,7 +14,7 @@ description: |
14
14
  code. This attack is more practical against 'cloud' users as intra-cloud
15
15
  latencies are sufficiently low to make the attack viable.
16
16
 
17
- cvss_v2: 7.6
17
+ cvss_v2: 5.1
18
18
  patched_versions:
19
19
  - ~> 1.1.6
20
20
  - ~> 1.2.8
@@ -0,0 +1,20 @@
1
+ ---
2
+ gem: rbovirt
3
+ cve: 2014-0036
4
+ osvdb: 104080
5
+ url: http://osvdb.org/show/osvdb/104080
6
+ title: rbovirt Gem for Ruby contains a flaw
7
+ date: 2014-03-05
8
+
9
+ description: |
10
+ rbovirt Gem for Ruby contains a flaw related to certificate validation.
11
+ The issue is due to the program failing to validate SSL certificates. This may
12
+ allow an attacker with access to network traffic (e.g. MiTM, DNS cache
13
+ poisoning) to spoof the SSL server via an arbitrary certificate that appears
14
+ valid. Such an attack would allow for the interception of sensitive traffic,
15
+ and potentially allow for the injection of content into the SSL stream.
16
+
17
+ cvss_v2:
18
+
19
+ patched_versions:
20
+ - '>= 0.0.24'
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  gem: rgpg
3
3
  osvdb: 95948
4
+ cve: 2013-4203
4
5
  url: http://www.osvdb.org/show/osvdb/95948
5
6
  title: Ruby rgpg Gem Shell Command Injection Vulnerabilities
6
7
  date: 2013-08-02
@@ -8,6 +9,6 @@ description: |
8
9
  rgpg Gem for Ruby contains a flaw in the GpgHelper module (lib/rgpg/gpg_helper.rb).
9
10
  The issue is due to the program failing to properly sanitize user-supplied input before being used in the system() function for execution.
10
11
  This may allow a remote attacker to execute arbitrary commands.
11
- cvss_v2:
12
+ cvss_v2: 7.5
12
13
  patched_versions:
13
14
  - ">= 0.2.3"
@@ -0,0 +1,13 @@
1
+ ---
2
+ gem: sfpagent
3
+ cve:
4
+ osvdb: 105971
5
+ url: http://www.osvdb.org/show/osvdb/105971
6
+ title: sfpagent Gem for Ruby Remote Command Injection
7
+ date: 2014-04-16
8
+ description: sfpagent Gem for Ruby contains a flaw that is triggered as JSON[body]
9
+ input is not properly sanitized when handling module names with shell metacharacters.
10
+ This may allow a context-dependent attacker to execute arbitrary commands.
11
+ cvss_v2:
12
+ patched_versions:
13
+ - ">= 0.4.15"
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  gem: spree
3
3
  cve: 2013-1656
4
4
  osvdb: 91216
@@ -7,4 +7,5 @@ title: Spree promotion_actions_controller.rb promotion_action Parameter Arbitrar
7
7
  date: 2013-02-21
8
8
  description: Spree contains a flaw that is triggered when handling input passed via the 'promotion_action' parameter to promotion_actions_controller.rb. This may allow a remote authenticated attacker to instantiate arbitrary Ruby objects and potentially execute arbitrary commands.
9
9
  cvss_v2: 4.3
10
- patched_versions:
10
+ patched_versions:
11
+ - ">= 2.0.0"
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  gem: spree
3
3
  cve: 2013-1656
4
4
  osvdb: 91217
@@ -7,4 +7,5 @@ title: Spree payment_methods_controller.rb payment_method Parameter Arbitrary Ru
7
7
  date: 2013-02-21
8
8
  description: Spree contains a flaw that is triggered when handling input passed via the 'payment_method' parameter to payment_methods_controller.rb. This may allow a remote authenticated attacker to instantiate arbitrary Ruby objects and potentially execute arbitrary commands.
9
9
  cvss_v2: 4.3
10
- patched_versions:
10
+ patched_versions:
11
+ - ">= 2.0.0"
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  gem: spree
3
3
  cve: 2013-1656
4
4
  osvdb: 91218
@@ -7,4 +7,5 @@ title: Spree promotions_controller.rb calculator_type Parameter Arbitrary Ruby O
7
7
  date: 2013-02-21
8
8
  description: Spree contains a flaw that is triggered when handling input passed via the 'calculator_type' parameter to promotions_controller.rb. This may allow a remote authenticated attacker to instantiate arbitrary Ruby objects and potentially execute arbitrary commands.
9
9
  cvss_v2: 4.3
10
- patched_versions:
10
+ patched_versions:
11
+ - ">= 2.0.0"
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  gem: spree
3
3
  cve: 2013-1656
4
4
  osvdb: 91219
@@ -7,4 +7,5 @@ title: Spree promotion_rules_controller.rb promotion_rule Parameter Arbitrary Ru
7
7
  date: 2013-02-21
8
8
  description: Spree contains a flaw that is triggered when handling input passed via the 'promotion_rule' parameter to promotion_rules_controller.rb. This may allow a remote authenticated attacker to instantiate arbitrary Ruby objects and potentially execute arbitrary commands.
9
9
  cvss_v2: 4.3
10
- patched_versions:
10
+ patched_versions:
11
+ - ">= 2.0.0"
@@ -0,0 +1,14 @@
1
+ ---
2
+ gem: sprout
3
+ cve: 2013-6421
4
+ osvdb: 100598
5
+ url: http://www.osvdb.org/show/osvdb/100598
6
+ title: Sprout Gem for Ruby contains a flaw
7
+ date: 2013-12-02
8
+ description: sprout Gem for Ruby contains a flaw in the unpack_zip() function in archive_unpacker.rb.
9
+ The issue is due to the program failing to properly sanitize input passed via the 'zip_file', 'dir',
10
+ 'zip_name', and 'output' parameters. This may allow a context-dependent attacker to execute arbitrary code.
11
+ cvss_v2: 7.5
12
+ patched_versions:
13
+ unaffected_versions:
14
+ - '< 0.7.246'
@@ -0,0 +1,11 @@
1
+ ---
2
+ gem: webbynode
3
+ osvdb: 100920
4
+ url: http://osvdb.org/show/osvdb/100920
5
+ title: Webbynode Gem for Ruby contains a flaw
6
+ date: 2013-12-12
7
+ description: Webbynode Gem for Ruby contains a flaw in notify.rb that is triggered
8
+ when handling a specially crafted growlnotify message. This may allow a
9
+ context-dependent attacker to execute arbitrary commands.
10
+ cvss_v2: 7.5
11
+ patched_versions:
@@ -0,0 +1,15 @@
1
+ ---
2
+ gem: will_paginate
3
+ osvdb: 101138
4
+ cve: 2013-6459
5
+ url: http://osvdb.org/show/osvdb/101138
6
+ title: will_paginate Gem for Ruby Generated Pagination Link Unspecified XSS
7
+ date: 2013-09-19
8
+ description: will_paginate Gem for Ruby contains a flaw that allows a cross-site scripting (XSS) attack.
9
+ This flaw exists because the application does not validate certain unspecified input related to
10
+ generated pagination links before returning it to the user. This may allow an attacker to create
11
+ a specially crafted request that would execute arbitrary script code in a users browser within the
12
+ trust relationship between their browser and the server.
13
+ cvss_v2: 4.3
14
+ patched_versions:
15
+ - ">= 3.0.5"
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ load File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
2
  require 'yaml'
3
3
 
4
4
  shared_examples_for 'Advisory' do |path|
@@ -131,7 +131,7 @@ shared_examples_for 'Advisory' do |path|
131
131
  it "should contain valid RubyGem version requirements" do
132
132
  lambda {
133
133
  Gem::Requirement.new(*subject)
134
- }.should_not raise_error(ArgumentError)
134
+ }.should_not raise_error
135
135
  end
136
136
  end
137
137
  end
@@ -155,7 +155,7 @@ shared_examples_for 'Advisory' do |path|
155
155
  it "should contain valid RubyGem version requirements" do
156
156
  lambda {
157
157
  Gem::Requirement.new(*subject)
158
- }.should_not raise_error(ArgumentError)
158
+ }.should_not raise_error
159
159
  end
160
160
  end
161
161
  end
@@ -1,8 +1,7 @@
1
- require 'spec_helper'
2
- require 'advisory_example'
3
-
1
+ load File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
+ load File.join(File.dirname(__FILE__), 'advisory_example.rb')
4
3
  describe "gems" do
5
- Dir.glob('gems/*/*.yml') do |path|
4
+ Dir.glob(File.join(File.dirname(__FILE__), '../gems/*/*.yml')) do |path|
6
5
  include_examples 'Advisory', path
7
6
  end
8
7
  end
@@ -9,4 +9,5 @@ homepage: https://github.com/rubysec/bundler-audit#readme
9
9
  required_rubygems_version: ">= 1.8.0"
10
10
 
11
11
  dependencies:
12
+ thor: ~> 0.18
12
13
  bundler: ~> 1.2
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2014 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
4
  # bundler-audit is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2014 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
4
  # bundler-audit is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2014 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
4
  # bundler-audit is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -18,12 +18,13 @@
18
18
  require 'bundler/audit/scanner'
19
19
  require 'bundler/audit/version'
20
20
 
21
+ require 'thor'
21
22
  require 'bundler'
22
23
  require 'bundler/vendored_thor'
23
24
 
24
25
  module Bundler
25
26
  module Audit
26
- class CLI < Thor
27
+ class CLI < ::Thor
27
28
 
28
29
  default_task :check
29
30
  map '--version' => :version
@@ -72,9 +73,9 @@ module Bundler
72
73
 
73
74
  protected
74
75
 
75
- def say(string="", color=nil)
76
+ def say(message="", color=nil)
76
77
  color = nil unless $stdout.tty?
77
- super(string, color)
78
+ super(message.to_s, color)
78
79
  end
79
80
 
80
81
  def print_warning(message)
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2014 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
4
  # bundler-audit is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -34,8 +34,11 @@ module Bundler
34
34
  # Default path to the ruby-advisory-db
35
35
  VENDORED_PATH = File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','data','ruby-advisory-db'))
36
36
 
37
+ # Timestamp for when the database was last updated
38
+ VENDORED_TIMESTAMP = Time.parse(File.read("#{VENDORED_PATH}.ts")).utc
39
+
37
40
  # Path to the user's copy of the ruby-advisory-db
38
- USER_PATH = File.join(Gem.user_home,'.local','share','ruby-advisory-db')
41
+ USER_PATH = File.expand_path(File.join(ENV['HOME'],'.local','share','ruby-advisory-db'))
39
42
 
40
43
  # The path to the advisory database
41
44
  attr_reader :path
@@ -66,7 +69,7 @@ module Bundler
66
69
  def self.path
67
70
  if File.directory?(USER_PATH)
68
71
  t1 = Dir.chdir(USER_PATH) { Time.parse(`git log --pretty="%cd" -1`) }
69
- t2 = File.ctime(VENDORED_PATH)
72
+ t2 = VENDORED_TIMESTAMP
70
73
 
71
74
  if t1 >= t2 then USER_PATH
72
75
  else VENDORED_PATH
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2014 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
4
  # bundler-audit is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -18,6 +18,6 @@
18
18
  module Bundler
19
19
  module Audit
20
20
  # bundler-audit version
21
- VERSION = '0.3.0'
21
+ VERSION = '0.3.1'
22
22
  end
23
23
  end
@@ -7,6 +7,22 @@ describe Bundler::Audit::Advisory do
7
7
  let(:gem) { 'actionpack' }
8
8
  let(:id) { 'OSVDB-84243' }
9
9
  let(:path) { File.join(root,'gems',gem,"#{id}.yml") }
10
+ let(:an_unaffected_version) do
11
+ Bundler::Audit::Advisory.load(path).unaffected_versions.map { |version_rule|
12
+ # For all the rules, get the individual constraints out and see if we
13
+ # can find a suitable one...
14
+ version_rule.requirements.select { |(constraint, gem_version)|
15
+ # We only want constraints where the version number specified is
16
+ # one of the unaffected version. I.E. we don't want ">", "<", or if
17
+ # such a thing exists, "!=" constraints.
18
+ ['~>', '>=', '=', '<='].include?(constraint)
19
+ }.map { |(constraint, gem_version)|
20
+ # Fetch just the version component, which is a Gem::Version,
21
+ # and extract the string representation of the version.
22
+ gem_version.version
23
+ }
24
+ }.flatten.first
25
+ end
10
26
 
11
27
  describe "load" do
12
28
  let(:data) { YAML.load_file(path) }
@@ -19,6 +35,15 @@ describe Bundler::Audit::Advisory do
19
35
  its(:cvss_v2) { should == data['cvss_v2'] }
20
36
  its(:description) { should == data['description'] }
21
37
 
38
+ context "YAML data not representing a hash" do
39
+ it "should raise an exception" do
40
+ path = File.expand_path('../fixtures/not_a_hash.yml', __FILE__)
41
+ expect {
42
+ Advisory.load(path)
43
+ }.to raise_exception("advisory data in #{path.dump} was not a Hash")
44
+ end
45
+ end
46
+
22
47
  describe "#patched_versions" do
23
48
  subject { described_class.load(path).patched_versions }
24
49
 
@@ -58,7 +83,7 @@ describe Bundler::Audit::Advisory do
58
83
  subject { described_class.load(path) }
59
84
 
60
85
  context "when passed a version that matches one unaffected version" do
61
- let(:version) { Gem::Version.new('2.3.10') }
86
+ let(:version) { Gem::Version.new(an_unaffected_version) }
62
87
 
63
88
  it "should return true" do
64
89
  subject.unaffected?(version).should be_true
@@ -116,7 +141,7 @@ describe Bundler::Audit::Advisory do
116
141
  subject { described_class.load(path) }
117
142
 
118
143
  context "when passed a version that matches one unaffected version" do
119
- let(:version) { Gem::Version.new('2.3.12') }
144
+ let(:version) { Gem::Version.new(an_unaffected_version) }
120
145
 
121
146
  it "should return false" do
122
147
  subject.vulnerable?(version).should be_false