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
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rails', '3.2.15'
3
+ gem 'rails', '~> 3.2.17'
4
4
 
5
5
  # Bundle edge Rails instead:
6
6
  # gem 'rails', :git => 'git://github.com/rails/rails.git'
@@ -3,12 +3,52 @@ require 'bundler/audit/database'
3
3
  require 'tmpdir'
4
4
 
5
5
  describe Bundler::Audit::Database do
6
+ let(:vendored_advisories) do
7
+ Dir[File.join(Bundler::Audit::Database::VENDORED_PATH, '**/*.yml')].sort
8
+ end
9
+
6
10
  describe "path" do
7
11
  subject { described_class.path }
8
12
 
9
13
  it "it should be a directory" do
10
14
  File.directory?(subject).should be_true
11
15
  end
16
+
17
+ it "should prefer the user repo, iff it's as up to date, or more up to date than the vendored one" do
18
+ Bundler::Audit::Database.update!
19
+
20
+ Dir.chdir(Bundler::Audit::Database::USER_PATH) do
21
+ puts "Timestamp:"
22
+ system 'git log --pretty="%cd" -1'
23
+ end
24
+
25
+ # As up to date...
26
+ expect(Bundler::Audit::Database.path).to eq mocked_user_path
27
+
28
+ # More up to date...
29
+ fake_a_commit_in_the_user_repo
30
+ expect(Bundler::Audit::Database.path).to eq mocked_user_path
31
+
32
+ roll_user_repo_back(20)
33
+ expect(Bundler::Audit::Database.path).to eq Bundler::Audit::Database::VENDORED_PATH
34
+ end
35
+ end
36
+
37
+ describe "update!" do
38
+ it "should create the USER_PATH path as needed" do
39
+ Bundler::Audit::Database.update!
40
+ expect(File.directory?(mocked_user_path)).to be true
41
+ end
42
+
43
+ it "should create the repo, then update it given multple successive calls." do
44
+ expect_update_to_clone_repo!
45
+ Bundler::Audit::Database.update!
46
+ expect(File.directory?(mocked_user_path)).to be true
47
+
48
+ expect_update_to_update_repo!
49
+ Bundler::Audit::Database.update!
50
+ expect(File.directory?(mocked_user_path)).to be true
51
+ end
12
52
  end
13
53
 
14
54
  describe "#initialize" do
@@ -70,7 +110,18 @@ describe Bundler::Audit::Database do
70
110
  end
71
111
 
72
112
  describe "#size" do
73
- it { subject.size.should > 0 }
113
+ it { expect(subject.size).to eq vendored_advisories.count }
114
+ end
115
+
116
+ describe "#advisories" do
117
+ it "should return a list of all advisories." do
118
+ actual_advisories = Bundler::Audit::Database.new.
119
+ advisories.
120
+ map(&:path).
121
+ sort
122
+
123
+ expect(actual_advisories).to eq vendored_advisories
124
+ end
74
125
  end
75
126
 
76
127
  describe "#to_s" do
@@ -78,4 +129,10 @@ describe Bundler::Audit::Database do
78
129
  subject.to_s.should == subject.path
79
130
  end
80
131
  end
132
+
133
+ describe "#inspect" do
134
+ it "should produce a Ruby-ish instance descriptor" do
135
+ expect(Bundler::Audit::Database.new.inspect).to eq("#<Bundler::Audit::Database:#{Bundler::Audit::Database::VENDORED_PATH}>")
136
+ end
137
+ end
81
138
  end
@@ -0,0 +1,2 @@
1
+ ---
2
+ "Just a string."
@@ -20,75 +20,16 @@ describe "CLI" do
20
20
  end
21
21
 
22
22
  it "should print advisory information for the vulnerable gems" do
23
- expect = %{
24
- Name: actionmailer
25
- Version: 3.2.10
26
- Advisory: OSVDB-98629
27
- Criticality: Medium
28
- URL: http://www.osvdb.org/show/osvdb/98629
29
- Title: Action Mailer Gem for Ruby contains a possible DoS Vulnerability
30
- Solution: upgrade to >= 3.2.15
31
-
32
- Name: actionpack
33
- Version: 3.2.10
34
- Advisory: OSVDB-91452
35
- Criticality: Medium
36
- URL: http://www.osvdb.org/show/osvdb/91452
37
- Title: XSS vulnerability in sanitize_css in Action Pack
38
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
39
-
40
- Name: actionpack
41
- Version: 3.2.10
42
- Advisory: OSVDB-91454
43
- Criticality: Medium
44
- URL: http://osvdb.org/show/osvdb/91454
45
- Title: XSS Vulnerability in the `sanitize` helper of Ruby on Rails
46
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
47
-
48
- Name: actionpack
49
- Version: 3.2.10
50
- Advisory: OSVDB-89026
51
- Criticality: High
52
- URL: http://osvdb.org/show/osvdb/89026
53
- Title: Ruby on Rails params_parser.rb Action Pack Type Casting Parameter Parsing Remote Code Execution
54
- Solution: upgrade to ~> 2.3.15, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
55
-
56
- Name: activerecord
57
- Version: 3.2.10
58
- Advisory: OSVDB-91453
59
- Criticality: High
60
- URL: http://osvdb.org/show/osvdb/91453
61
- Title: Symbol DoS vulnerability in Active Record
62
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
63
-
64
- Name: activerecord
65
- Version: 3.2.10
66
- Advisory: OSVDB-90072
67
- Criticality: Medium
68
- URL: http://direct.osvdb.org/show/osvdb/90072
69
- Title: Ruby on Rails Active Record attr_protected Method Bypass
70
- Solution: upgrade to ~> 2.3.17, ~> 3.1.11, >= 3.2.12
71
-
72
- Name: activerecord
73
- Version: 3.2.10
74
- Advisory: OSVDB-89025
75
- Criticality: High
76
- URL: http://osvdb.org/show/osvdb/89025
77
- Title: Ruby on Rails Active Record JSON Parameter Parsing Query Bypass
78
- Solution: upgrade to ~> 2.3.16, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
79
-
80
- Name: activesupport
81
- Version: 3.2.10
82
- Advisory: OSVDB-91451
83
- Criticality: High
84
- URL: http://www.osvdb.org/show/osvdb/91451
85
- Title: XML Parsing Vulnerability affecting JRuby users
86
- Solution: upgrade to ~> 3.1.12, >= 3.2.13
87
-
88
- Unpatched versions found!
89
- }.strip.split "\n\n"
90
-
91
- subject.strip.split("\n\n").should =~ expect
23
+ advisory_pattern = /(Name: [^\n]+
24
+ Version: \d+.\d+.\d+
25
+ Advisory: OSVDB-\d+
26
+ Criticality: (High|Medium)
27
+ URL: http:\/\/(direct|www\.)?osvdb.org\/show\/osvdb\/\d+
28
+ Title: [^\n]*?
29
+ Solution: upgrade to ((~>|=>) \d+.\d+.\d+, )*(~>|=>) \d+.\d+.\d+[\s\n]*?)+/
30
+
31
+ expect(subject).to match(advisory_pattern)
32
+ expect(subject).to include("Unpatched versions found!")
92
33
  end
93
34
  end
94
35
 
@@ -13,6 +13,46 @@ module Helpers
13
13
  def decolorize(string)
14
14
  string.gsub(/\e\[\d+m/, "")
15
15
  end
16
+
17
+ def mocked_user_path
18
+ File.expand_path('../../tmp/ruby-advisory-db', __FILE__)
19
+ end
20
+
21
+ def expect_update_to_clone_repo!
22
+ Bundler::Audit::Database.
23
+ should_receive(:system).
24
+ with('git', 'clone', Bundler::Audit::Database::VENDORED_PATH, mocked_user_path).
25
+ and_call_original
26
+ end
27
+
28
+ def expect_update_to_update_repo!
29
+ Bundler::Audit::Database.
30
+ should_receive(:system).
31
+ with('git', 'pull', 'origin', 'master').
32
+ and_call_original
33
+ end
34
+
35
+ def fake_a_commit_in_the_user_repo
36
+ Dir.chdir(mocked_user_path) do
37
+ system 'git', 'commit', '--allow-empty', '-m', 'Dummy commit.'
38
+ end
39
+ end
40
+
41
+ def roll_user_repo_back(num_commits)
42
+ Dir.chdir(mocked_user_path) do
43
+ system 'git', 'reset', '--hard', "HEAD~#{num_commits}"
44
+ end
45
+ end
16
46
  end
17
47
 
18
48
  include Bundler::Audit
49
+
50
+ RSpec.configure do |config|
51
+ include Helpers
52
+
53
+ config.before(:each) do
54
+ stub_const("Bundler::Audit::Database::URL", Bundler::Audit::Database::VENDORED_PATH)
55
+ stub_const("Bundler::Audit::Database::USER_PATH", mocked_user_path)
56
+ FileUtils.rm_rf(mocked_user_path) if File.exist?(mocked_user_path)
57
+ end
58
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler-audit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-01 00:00:00.000000000 Z
11
+ date: 2014-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.18'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.18'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -47,6 +61,7 @@ files:
47
61
  - Rakefile
48
62
  - bin/bundle-audit
49
63
  - bundler-audit.gemspec
64
+ - data/ruby-advisory-db.ts
50
65
  - gemspec.yml
51
66
  - lib/bundler/audit.rb
52
67
  - lib/bundler/audit/advisory.rb
@@ -60,6 +75,7 @@ files:
60
75
  - spec/bundle/secure/Gemfile
61
76
  - spec/bundle/unpatched_gems/Gemfile
62
77
  - spec/database_spec.rb
78
+ - spec/fixtures/not_a_hash.yml
63
79
  - spec/integration_spec.rb
64
80
  - spec/scanner_spec.rb
65
81
  - spec/spec_helper.rb
@@ -72,6 +88,13 @@ files:
72
88
  - data/ruby-advisory-db/README.md
73
89
  - data/ruby-advisory-db/Rakefile
74
90
  - data/ruby-advisory-db/gems/actionmailer/OSVDB-98629.yml
91
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100524.yml
92
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100525.yml
93
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100526.yml
94
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100527.yml
95
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100528.yml
96
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-103439.yml
97
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-103440.yml
75
98
  - data/ruby-advisory-db/gems/actionpack/OSVDB-79727.yml
76
99
  - data/ruby-advisory-db/gems/actionpack/OSVDB-84243.yml
77
100
  - data/ruby-advisory-db/gems/actionpack/OSVDB-84513.yml
@@ -79,6 +102,7 @@ files:
79
102
  - data/ruby-advisory-db/gems/actionpack/OSVDB-89026.yml
80
103
  - data/ruby-advisory-db/gems/actionpack/OSVDB-91452.yml
81
104
  - data/ruby-advisory-db/gems/actionpack/OSVDB-91454.yml
105
+ - data/ruby-advisory-db/gems/activerecord/OSVDB-103438.yml
82
106
  - data/ruby-advisory-db/gems/activerecord/OSVDB-82403.yml
83
107
  - data/ruby-advisory-db/gems/activerecord/OSVDB-82610.yml
84
108
  - data/ruby-advisory-db/gems/activerecord/OSVDB-89025.yml
@@ -89,6 +113,7 @@ files:
89
113
  - data/ruby-advisory-db/gems/activesupport/OSVDB-84516.yml
90
114
  - data/ruby-advisory-db/gems/activesupport/OSVDB-89594.yml
91
115
  - data/ruby-advisory-db/gems/activesupport/OSVDB-91451.yml
116
+ - data/ruby-advisory-db/gems/arabic-prawn/OSVDB-104365.yml
92
117
  - data/ruby-advisory-db/gems/cocaine/OSVDB-98835.yml
93
118
  - data/ruby-advisory-db/gems/command_wrap/OSVDB-91450.yml
94
119
  - data/ruby-advisory-db/gems/crack/OSVDB-90742.yml
@@ -96,6 +121,8 @@ files:
96
121
  - data/ruby-advisory-db/gems/curl/OSVDB-91230.yml
97
122
  - data/ruby-advisory-db/gems/devise/OSVDB-89642.yml
98
123
  - data/ruby-advisory-db/gems/dragonfly/OSVDB-90647.yml
124
+ - data/ruby-advisory-db/gems/echor/OSVDB-102129.yml
125
+ - data/ruby-advisory-db/gems/echor/OSVDB-102130.yml
99
126
  - data/ruby-advisory-db/gems/enum_column3/OSVDB-94679.yml
100
127
  - data/ruby-advisory-db/gems/extlib/OSVDB-90740.yml
101
128
  - data/ruby-advisory-db/gems/fastreader/OSVDB-91232.yml
@@ -105,8 +132,10 @@ files:
105
132
  - data/ruby-advisory-db/gems/flash_tool/OSVDB-90829.yml
106
133
  - data/ruby-advisory-db/gems/fog-dragonfly/OSVDB-96798.yml
107
134
  - data/ruby-advisory-db/gems/ftpd/OSVDB-90784.yml
135
+ - data/ruby-advisory-db/gems/gitlab-grit/OSVDB-99370.yml
108
136
  - data/ruby-advisory-db/gems/gtk2/OSVDB-40774.yml
109
137
  - data/ruby-advisory-db/gems/httparty/OSVDB-90741.yml
138
+ - data/ruby-advisory-db/gems/i18n/OSVDB-100528.yml
110
139
  - data/ruby-advisory-db/gems/json/OSVDB-90074.yml
111
140
  - data/ruby-advisory-db/gems/karteek-docsplit/OSVDB-92117.yml
112
141
  - data/ruby-advisory-db/gems/kelredd-pruview/OSVDB-92228.yml
@@ -119,22 +148,34 @@ files:
119
148
  - data/ruby-advisory-db/gems/mini_magick/OSVDB-91231.yml
120
149
  - data/ruby-advisory-db/gems/multi_xml/OSVDB-89148.yml
121
150
  - data/ruby-advisory-db/gems/newrelic_rpm/OSVDB-90189.yml
151
+ - data/ruby-advisory-db/gems/nokogiri/OSVDB-101179.yml
152
+ - data/ruby-advisory-db/gems/nokogiri/OSVDB-101458.yml
122
153
  - data/ruby-advisory-db/gems/nori/OSVDB-90196.yml
154
+ - data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99693.yml
155
+ - data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99888.yml
123
156
  - data/ruby-advisory-db/gems/omniauth-oauth2/OSVDB-90264.yml
157
+ - data/ruby-advisory-db/gems/paperclip/OSVDB-103151.yml
158
+ - data/ruby-advisory-db/gems/paratrooper-newrelic/OSVDB-101839.yml
159
+ - data/ruby-advisory-db/gems/paratrooper-pingdom/OSVDB-101847.yml
124
160
  - data/ruby-advisory-db/gems/pdfkit/OSVDB-90867.yml
125
161
  - data/ruby-advisory-db/gems/rack-cache/OSVDB-83077.yml
126
162
  - data/ruby-advisory-db/gems/rack/OSVDB-89939.yml
163
+ - data/ruby-advisory-db/gems/rbovirt/OSVDB-104080.yml
127
164
  - data/ruby-advisory-db/gems/rdoc/OSVDB-90004.yml
128
165
  - data/ruby-advisory-db/gems/redis-namespace/OSVDB-96425.yml
129
166
  - data/ruby-advisory-db/gems/rgpg/OSVDB-95948.yml
130
167
  - data/ruby-advisory-db/gems/ruby_parser/OSVDB-90561.yml
168
+ - data/ruby-advisory-db/gems/sfpagent/OSVDB-105971.yml
131
169
  - data/ruby-advisory-db/gems/sounder/OSVDB-96278.yml
132
170
  - data/ruby-advisory-db/gems/spree/OSVDB-91216.yml
133
171
  - data/ruby-advisory-db/gems/spree/OSVDB-91217.yml
134
172
  - data/ruby-advisory-db/gems/spree/OSVDB-91218.yml
135
173
  - data/ruby-advisory-db/gems/spree/OSVDB-91219.yml
174
+ - data/ruby-advisory-db/gems/sprout/OSVDB-100598.yml
136
175
  - data/ruby-advisory-db/gems/thumbshooter/OSVDB-91839.yml
176
+ - data/ruby-advisory-db/gems/webbynode/OSVDB-100920.yml
137
177
  - data/ruby-advisory-db/gems/wicked/OSVDB-98270.yml
178
+ - data/ruby-advisory-db/gems/will_paginate/OSVDB-101138.yml
138
179
  - data/ruby-advisory-db/lib/scrape.rb
139
180
  - data/ruby-advisory-db/spec/advisory_example.rb
140
181
  - data/ruby-advisory-db/spec/gems_spec.rb
@@ -159,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
200
  version: 1.8.0
160
201
  requirements: []
161
202
  rubyforge_project:
162
- rubygems_version: 2.0.12
203
+ rubygems_version: 2.0.14
163
204
  signing_key:
164
205
  specification_version: 4
165
206
  summary: Patch-level verification for Bundler