bundler-audit 0.9.1 → 0.9.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 762980c9b274b19e477ee0be0ae021e452a1e7d63796ceb6da0d667de704dad9
4
- data.tar.gz: 3e0fae808a027e677f3d218949c092d8189fc124bb34f61b57fdf982b5ffd6b1
3
+ metadata.gz: 91fab22bb836ac9e1b56f525051f80003c4c0515a8d01e779b9ba71f079ba05d
4
+ data.tar.gz: f312f73a62453f2002d58465002ab7bb8396f53ba5d51ca363e84b422f0216a1
5
5
  SHA512:
6
- metadata.gz: faa37304223ab40fd5678b6a4fcc1f9edb6d112c418c3a80a38aff6dbfbfacd416481f32f402998ece370d4646fe416e8f9453a5cec98d634845ff7bfd1abc6f
7
- data.tar.gz: 7fbd39c761fdee364266207e4f0b52be6347b480b8447d31688428b8d3b5337c7f7403142ef0b2da0bc293ddfbe1ea5df93750b3a70be3920eff37af1d6a7884
6
+ metadata.gz: 2067a4b037050d7f928e805335ea6cf053a83978888477af56d3e44199409bbf9923f46dec0963bf40906c6e8afeec39aba32722daecdfe8576410d1431733a7
7
+ data.tar.gz: 88c4b7e6c8a5d390743706dafb90ce3431df698bca07348185f0ebf0d28c3842b922d52936e743911bd56d9c4db373cdf19e309f955a44e0d1c7d7b388c7eb31
@@ -41,4 +41,6 @@ Steps to reproduce the bug:
41
41
  ...
42
42
  $ ruby --version
43
43
  ...
44
+ $ git --version
45
+ ...
44
46
 
@@ -9,13 +9,12 @@ jobs:
9
9
  fail-fast: false
10
10
  matrix:
11
11
  ruby:
12
- - 2.5
13
- - 2.6
14
- - 2.7
15
12
  - '3.0'
16
- - 3.1
13
+ - '3.1'
14
+ - '3.2'
15
+ - '3.3'
17
16
  - jruby
18
- - truffleruby-head
17
+ - truffleruby
19
18
  name: Ruby ${{ matrix.ruby }}
20
19
  steps:
21
20
  - uses: actions/checkout@v2
data/.rubocop.yml CHANGED
@@ -84,3 +84,4 @@ Style/ExpandPathArguments: { Enabled: false } # Offense count: 5
84
84
  Style/FrozenStringLiteralComment: { Enabled: false } # Offense count: 42
85
85
  Style/MixinUsage: { Exclude: ['spec/spec_helper.rb'] } # Offense count: 1
86
86
  Layout/LineLength: { Enabled: false }
87
+ Style/RedundantParentheses: { Enabled: false }
data/ChangeLog.md CHANGED
@@ -1,5 +1,23 @@
1
+ ### 0.9.2 / 2024-08-22
2
+
3
+ * Officially support Ruby 3.2 and 3.3.
4
+ * Corrected the gemspec license to indicate GPL-3.0 *or* later.
5
+
6
+ #### CLI
7
+
8
+ * Correctly handle {Bundler::Audit::Database::UpdateFailed} exceptions in
9
+ `bundle-audit update`.
10
+ * Changed wording from "upgrade to" to "update to" in `bundle-audit check`
11
+ output.
12
+
13
+ #### Rake Task
14
+
15
+ * Fixed empty `bundle:audit:update` rake task.
16
+
1
17
  ### 0.9.1 / 2022-05-19
2
18
 
19
+ * Opt into rubygems.org MFA requirement.
20
+
3
21
  #### CLI
4
22
 
5
23
  * Improve the readability of the suggested gem versions to upgrade to
data/README.md CHANGED
@@ -31,7 +31,7 @@ Audit a project's `Gemfile.lock`:
31
31
  Criticality: Medium
32
32
  URL: http://www.osvdb.org/show/osvdb/91452
33
33
  Title: XSS vulnerability in sanitize_css in Action Pack
34
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
34
+ Solution: update to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
35
35
 
36
36
  Name: actionpack
37
37
  Version: 3.2.10
@@ -39,7 +39,7 @@ Audit a project's `Gemfile.lock`:
39
39
  Criticality: Medium
40
40
  URL: http://osvdb.org/show/osvdb/91454
41
41
  Title: XSS Vulnerability in the `sanitize` helper of Ruby on Rails
42
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
42
+ Solution: update to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
43
43
 
44
44
  Name: actionpack
45
45
  Version: 3.2.10
@@ -47,7 +47,7 @@ Audit a project's `Gemfile.lock`:
47
47
  Criticality: High
48
48
  URL: http://osvdb.org/show/osvdb/89026
49
49
  Title: Ruby on Rails params_parser.rb Action Pack Type Casting Parameter Parsing Remote Code Execution
50
- Solution: upgrade to ~> 2.3.15, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
50
+ Solution: update to ~> 2.3.15, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
51
51
 
52
52
  Name: activerecord
53
53
  Version: 3.2.10
@@ -55,7 +55,7 @@ Audit a project's `Gemfile.lock`:
55
55
  Criticality: High
56
56
  URL: http://osvdb.org/show/osvdb/91453
57
57
  Title: Symbol DoS vulnerability in Active Record
58
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
58
+ Solution: update to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
59
59
 
60
60
  Name: activerecord
61
61
  Version: 3.2.10
@@ -63,7 +63,7 @@ Audit a project's `Gemfile.lock`:
63
63
  Criticality: Medium
64
64
  URL: http://direct.osvdb.org/show/osvdb/90072
65
65
  Title: Ruby on Rails Active Record attr_protected Method Bypass
66
- Solution: upgrade to ~> 2.3.17, ~> 3.1.11, >= 3.2.12
66
+ Solution: update to ~> 2.3.17, ~> 3.1.11, >= 3.2.12
67
67
 
68
68
  Name: activerecord
69
69
  Version: 3.2.10
@@ -71,7 +71,7 @@ Audit a project's `Gemfile.lock`:
71
71
  Criticality: High
72
72
  URL: http://osvdb.org/show/osvdb/89025
73
73
  Title: Ruby on Rails Active Record JSON Parameter Parsing Query Bypass
74
- Solution: upgrade to ~> 2.3.16, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
74
+ Solution: update to ~> 2.3.16, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
75
75
 
76
76
  Name: activesupport
77
77
  Version: 3.2.10
@@ -79,7 +79,7 @@ Audit a project's `Gemfile.lock`:
79
79
  Criticality: High
80
80
  URL: http://www.osvdb.org/show/osvdb/91451
81
81
  Title: XML Parsing Vulnerability affecting JRuby users
82
- Solution: upgrade to ~> 3.1.12, >= 3.2.13
82
+ Solution: update to ~> 3.1.12, >= 3.2.13
83
83
 
84
84
  Unpatched versions found!
85
85
 
@@ -147,10 +147,20 @@ $ bundle-audit check --format json --output bundle-audit.json
147
147
 
148
148
  ## Rake Tasks
149
149
 
150
- Bundler-audit provides Rake tasks for checking the code and for updating
151
- its vulnerability database:
150
+ Bundler-audit provides `rake` tasks for checking the code and for updating
151
+ its vulnerability database.
152
+
153
+ Simply add the following code to the `Rakefile`:
154
+
155
+ ```ruby
156
+ require 'bundler/audit/task'
157
+ Bundler::Audit::Task.new
158
+ ```
159
+
160
+ The following `rake` tasks will then become available:
152
161
 
153
162
  ```bash
163
+ $ rake -T
154
164
  rake bundle:audit
155
165
  rake bundle:audit:update
156
166
  ```
@@ -231,7 +241,7 @@ $ brew install git
231
241
 
232
242
  ## License
233
243
 
234
- Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
244
+ Copyright (c) 2013-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
235
245
 
236
246
  bundler-audit is free software: you can redistribute it and/or modify
237
247
  it under the terms of the GNU General Public License as published by
@@ -30,7 +30,6 @@ Gem::Specification.new do |gem|
30
30
  gem.default_executable = gem.executables.first if Gem::VERSION < '1.7.'
31
31
 
32
32
  gem.extensions = glob[gemspec['extensions'] || 'ext/**/extconf.rb']
33
- gem.test_files = glob[gemspec['test_files'] || 'spec/{**/}*_spec.rb']
34
33
  gem.extra_rdoc_files = glob[gemspec['extra_doc_files'] || '*.{txt,md}']
35
34
 
36
35
  gem.require_paths = Array(gemspec.fetch('require_paths') {
data/gemspec.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  name: bundler-audit
2
2
  summary: Patch-level verification for Bundler
3
3
  description: bundler-audit provides patch-level verification for Bundled apps.
4
- license: GPL-3.0+
4
+ license: GPL-3.0-or-later
5
5
  authors: Postmodern
6
6
  email: postmodern.mod3@gmail.com
7
7
  homepage: https://github.com/rubysec/bundler-audit#readme
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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
@@ -101,7 +101,7 @@ module Bundler
101
101
 
102
102
  def advisory_solution(advisory)
103
103
  unless advisory.patched_versions.empty?
104
- "upgrade to #{advisory.patched_versions.map { |v| "'#{v}'" }.join(', ')}"
104
+ "update to #{advisory.patched_versions.map { |v| "'#{v}'" }.join(', ')}"
105
105
  else
106
106
  "remove or disable this gem until a patch is available!"
107
107
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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
@@ -104,7 +104,7 @@ module Bundler
104
104
  end
105
105
 
106
106
  unless advisory.patched_versions.empty?
107
- say "Solution: upgrade to ", :red
107
+ say "Solution: update to ", :red
108
108
  say advisory.patched_versions.map { |v| "'#{v}'" }.join(', ')
109
109
  else
110
110
  say "Solution: ", :red
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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
@@ -67,7 +67,7 @@ module Bundler
67
67
 
68
68
  database = Database.new(options[:database])
69
69
  scanner = begin
70
- Scanner.new(dir,options[:gemfile_lock],database, options[:config])
70
+ Scanner.new(dir,options[:gemfile_lock],database,options[:config])
71
71
  rescue Bundler::GemfileLockNotFound => exception
72
72
  say exception.message, :red
73
73
  exit 1
@@ -137,19 +137,23 @@ module Bundler
137
137
 
138
138
  database = Database.new(path)
139
139
 
140
- case database.update!(quiet: options.quiet?)
141
- when true
142
- say("Updated ruby-advisory-db", :green) unless options.quiet?
143
- when false
144
- say_error "Failed updating ruby-advisory-db!", :red
145
- exit 1
146
- when nil
147
- unless Bundler.git_present?
148
- say_error "Git is not installed!", :red
149
- exit 1
140
+ begin
141
+ case database.update!(quiet: options.quiet?)
142
+ when true
143
+ say("Updated ruby-advisory-db", :green) unless options.quiet?
144
+ when nil
145
+ if Bundler.git_present?
146
+ unless options.quiet?
147
+ say "Skipping update, ruby-advisory-db is not a git repository", :yellow
148
+ end
149
+ else
150
+ say_error "Git is not installed!", :red
151
+ exit 1
152
+ end
150
153
  end
151
-
152
- say "Skipping update", :yellow
154
+ rescue Database::UpdateFailed => error
155
+ say error.message, :red
156
+ exit 1
153
157
  end
154
158
 
155
159
  stats(path) unless options.quiet?
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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
@@ -141,9 +141,8 @@ module Bundler
141
141
  # @option options [Boolean] :quiet
142
142
  # Specify whether `git` should be `--quiet`.
143
143
  #
144
- # @return [Boolean, nil]
144
+ # @return [Boolean]
145
145
  # Specifies whether the update was successful.
146
- # A `nil` indicates no update was performed.
147
146
  #
148
147
  # @raise [ArgumentError]
149
148
  # Invalid options were given.
@@ -192,9 +191,13 @@ module Bundler
192
191
  # Specify whether `git` should be `--quiet`.
193
192
  #
194
193
  # @return [true, nil]
195
- # `true` indicates that the update was successful.
196
- # `nil` indicates the database is not a git repository, thus not
197
- # capable of being updated.
194
+ # * `true` - the ruby-advisory-db git repository was successfully
195
+ # updated.
196
+ # * `nil` - the ruby-advisory-db is not a git repository or the `git`
197
+ # command is not installed.
198
+ #
199
+ # @raise [UpdateFailed]
200
+ # Could not update the ruby-advisory-db git repository.
198
201
  #
199
202
  # @since 0.8.0
200
203
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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
@@ -16,33 +16,6 @@ module Bundler
16
16
  define
17
17
  end
18
18
 
19
- protected
20
-
21
- #
22
- # Defines the `bundle:audit` and `bundle:audit:update` task.
23
- #
24
- def define
25
- namespace :bundle do
26
- namespace :audit do
27
- desc 'Checks the Gemfile.lock for insecure dependencies'
28
- task :check do
29
- bundler_audit 'check'
30
- end
31
-
32
- desc 'Updates the bundler-audit vulnerability database'
33
- task :update do
34
- bundler_audit 'update'
35
- end
36
- end
37
-
38
- task :audit => 'audit:check'
39
- end
40
-
41
- task 'bundler:audit' => 'bundle:audit'
42
- task 'bundler:audit:check' => 'bundle:audit:check'
43
- task 'bundler:audit:update' => 'bundle:audit:update'
44
- end
45
-
46
19
  #
47
20
  # Runs the `bundler-audit` command with the additional arguments.
48
21
  #
@@ -59,6 +32,8 @@ module Bundler
59
32
  # If the `bundler-audit` command exits with an error, the rake task
60
33
  # will also exit with the same error code.
61
34
  #
35
+ # @api private
36
+ #
62
37
  def bundler_audit(*arguments)
63
38
  case system('bundler-audit',*arguments)
64
39
  when false
@@ -69,6 +44,71 @@ module Bundler
69
44
  return true
70
45
  end
71
46
  end
47
+
48
+ #
49
+ # Runs the `bundle-audit check` command.
50
+ #
51
+ # @return [true]
52
+ # The `bundler-audit` command successfully exited.
53
+ #
54
+ # @raise [CommandNotFound]
55
+ # The `bundler-audit` command could not be executed or was not found.
56
+ #
57
+ # @note
58
+ # If the `bundler-audit` command exits with an error, the rake task
59
+ # will also exit with the same error code.
60
+ #
61
+ # @api private
62
+ #
63
+ def check
64
+ bundler_audit 'check'
65
+ end
66
+
67
+ #
68
+ # Runs the `bundle-audit update` command.
69
+ #
70
+ # @return [true]
71
+ # The `bundler-audit` command successfully exited.
72
+ #
73
+ # @raise [CommandNotFound]
74
+ # The `bundler-audit` command could not be executed or was not found.
75
+ #
76
+ # @note
77
+ # If the `bundler-audit` command exits with an error, the rake task
78
+ # will also exit with the same error code.
79
+ #
80
+ # @api private
81
+ #
82
+ def update
83
+ bundler_audit 'update'
84
+ end
85
+
86
+ protected
87
+
88
+ #
89
+ # Defines the `bundle:audit` and `bundle:audit:update` task.
90
+ #
91
+ def define
92
+ namespace :bundle do
93
+ namespace :audit do
94
+ desc 'Checks the Gemfile.lock for insecure dependencies'
95
+ task :check do
96
+ check
97
+ end
98
+
99
+ desc 'Updates the bundler-audit vulnerability database'
100
+ task :update do
101
+ update
102
+ end
103
+ end
104
+
105
+ task :audit => 'audit:check'
106
+ end
107
+
108
+ task 'bundler:audit' => 'bundle:audit'
109
+ task 'bundler:audit:check' => 'bundle:audit:check'
110
+ task 'bundler:audit:update' => 'bundle:audit:update'
111
+ end
72
112
  end
73
113
  end
74
114
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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.9.1'
21
+ VERSION = '0.9.2'
22
22
  end
23
23
  end
data/lib/bundler/audit.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2013-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2013-2024 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
@@ -77,7 +77,7 @@ GEM
77
77
  activesupport (>= 4.2.0)
78
78
  i18n (1.8.10)
79
79
  concurrent-ruby (~> 1.0)
80
- loofah (2.9.1)
80
+ loofah (2.19.1)
81
81
  crass (~> 1.0.2)
82
82
  nokogiri (>= 1.5.9)
83
83
  mail (2.7.1)
@@ -88,13 +88,13 @@ GEM
88
88
  mini_portile2 (2.8.0)
89
89
  minitest (5.14.4)
90
90
  nio4r (2.5.7)
91
- nokogiri (1.13.6)
91
+ nokogiri (1.13.10)
92
92
  mini_portile2 (~> 2.8.0)
93
93
  racc (~> 1.4)
94
- nokogiri (1.13.6-x86_64-linux)
94
+ nokogiri (1.13.10-x86_64-linux)
95
95
  racc (~> 1.4)
96
- racc (1.6.0)
97
- rack (2.2.3)
96
+ racc (1.6.1)
97
+ rack (2.2.6.3)
98
98
  rack-test (1.1.0)
99
99
  rack (>= 1.0, < 3)
100
100
  rails (6.1.3.2)
@@ -115,8 +115,8 @@ GEM
115
115
  rails-dom-testing (2.0.3)
116
116
  activesupport (>= 4.2.0)
117
117
  nokogiri (>= 1.6)
118
- rails-html-sanitizer (1.3.0)
119
- loofah (~> 2.3)
118
+ rails-html-sanitizer (1.4.4)
119
+ loofah (~> 2.19, >= 2.19.1)
120
120
  railties (6.1.3.2)
121
121
  actionpack (= 6.1.3.2)
122
122
  activesupport (= 6.1.3.2)
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'rails', '~> 5.2'
4
- gem 'rails-html-sanitizer', '~> 1.0.3'
4
+ gem 'rails-html-sanitizer', '~> 1.4.4'
@@ -47,11 +47,11 @@ GEM
47
47
  concurrent-ruby (1.1.10)
48
48
  crass (1.0.6)
49
49
  erubi (1.10.0)
50
- globalid (1.0.0)
50
+ globalid (1.0.1)
51
51
  activesupport (>= 5.0)
52
- i18n (1.10.0)
52
+ i18n (1.12.0)
53
53
  concurrent-ruby (~> 1.0)
54
- loofah (2.18.0)
54
+ loofah (2.19.1)
55
55
  crass (~> 1.0.2)
56
56
  nokogiri (>= 1.5.9)
57
57
  mail (2.7.1)
@@ -60,15 +60,15 @@ GEM
60
60
  method_source (1.0.0)
61
61
  mini_mime (1.1.2)
62
62
  mini_portile2 (2.8.0)
63
- minitest (5.15.0)
63
+ minitest (5.17.0)
64
64
  nio4r (2.5.8)
65
- nokogiri (1.13.6)
65
+ nokogiri (1.13.10)
66
66
  mini_portile2 (~> 2.8.0)
67
67
  racc (~> 1.4)
68
- nokogiri (1.13.6-x86_64-linux)
68
+ nokogiri (1.13.10-x86_64-linux)
69
69
  racc (~> 1.4)
70
- racc (1.6.0)
71
- rack (2.2.3)
70
+ racc (1.6.1)
71
+ rack (2.2.6.3)
72
72
  rack-test (1.1.0)
73
73
  rack (>= 1.0, < 3)
74
74
  rails (5.2.8)
@@ -87,8 +87,8 @@ GEM
87
87
  rails-dom-testing (2.0.3)
88
88
  activesupport (>= 4.2.0)
89
89
  nokogiri (>= 1.6)
90
- rails-html-sanitizer (1.0.4)
91
- loofah (~> 2.2, >= 2.2.2)
90
+ rails-html-sanitizer (1.4.4)
91
+ loofah (~> 2.19, >= 2.19.1)
92
92
  railties (5.2.8)
93
93
  actionpack (= 5.2.8)
94
94
  activesupport (= 5.2.8)
@@ -105,7 +105,7 @@ GEM
105
105
  sprockets (>= 3.0.0)
106
106
  thor (1.2.1)
107
107
  thread_safe (0.3.6)
108
- tzinfo (1.2.9)
108
+ tzinfo (1.2.10)
109
109
  thread_safe (~> 0.1)
110
110
  websocket-driver (0.7.5)
111
111
  websocket-extensions (>= 0.1.0)
@@ -117,7 +117,7 @@ PLATFORMS
117
117
 
118
118
  DEPENDENCIES
119
119
  rails (~> 5.2)
120
- rails-html-sanitizer (~> 1.0.3)
120
+ rails-html-sanitizer (~> 1.4.4)
121
121
 
122
122
  BUNDLED WITH
123
123
  2.3.6
@@ -18,7 +18,7 @@ GEM
18
18
  i18n (0.9.5)
19
19
  concurrent-ruby (~> 1.0)
20
20
  multi_json (1.15.0)
21
- tzinfo (0.3.58)
21
+ tzinfo (0.3.61)
22
22
 
23
23
  PLATFORMS
24
24
  ruby
@@ -240,8 +240,8 @@ describe Bundler::Audit::CLI::Formats::Junit do
240
240
  end
241
241
 
242
242
  context "when Advisory#patched_versions is not empty" do
243
- it 'must print "Solution: upgrade to ..."' do
244
- expect(output).to include("Solution: upgrade to #{CGI.escapeHTML(advisory.patched_versions.map { |v| "'#{v}'" }.join(', '))}")
243
+ it 'must print "Solution: update to ..."' do
244
+ expect(output).to include("Solution: update to #{CGI.escapeHTML(advisory.patched_versions.map { |v| "'#{v}'" }.join(', '))}")
245
245
  end
246
246
  end
247
247
 
@@ -229,8 +229,8 @@ describe Bundler::Audit::CLI::Formats::Text do
229
229
  end
230
230
 
231
231
  context "when Advisory#patched_versions is not empty" do
232
- it 'must print "Solution: upgrade to ..."' do
233
- expect(output_lines).to include("Solution: upgrade to #{advisory.patched_versions.map { |v| "'#{v}'" }.join(', ')}")
232
+ it 'must print "Solution: update to ..."' do
233
+ expect(output_lines).to include("Solution: update to #{advisory.patched_versions.map { |v| "'#{v}'" }.join(', ')}")
234
234
  end
235
235
  end
236
236
 
data/spec/cli_spec.rb CHANGED
@@ -2,6 +2,8 @@ require 'spec_helper'
2
2
  require 'bundler/audit/cli'
3
3
 
4
4
  describe Bundler::Audit::CLI do
5
+ let(:database_path) { "/path/to/ruby-advisory-db" }
6
+
5
7
  describe ".start" do
6
8
  context "with wrong arguments" do
7
9
  it "exits with error status code" do
@@ -76,23 +78,17 @@ describe Bundler::Audit::CLI do
76
78
 
77
79
  context "when update fails" do
78
80
  before do
79
- expect(database).to receive(:update!).and_return(false)
81
+ expect(database).to receive(:update!).with(quiet: false).and_raise(
82
+ Bundler::Audit::Database::UpdateFailed,
83
+ "failed to update #{database_path.inspect}"
84
+ )
80
85
  end
81
86
 
82
- it "prints failure message" do
87
+ it "must print an error message and exit with 1" do
83
88
  expect {
84
- begin
89
+ expect {
85
90
  subject.update
86
- rescue SystemExit
87
- end
88
- }.to output(/Failed updating ruby-advisory-db!/).to_stderr
89
- end
90
-
91
- it "exits with error status code" do
92
- expect {
93
- # Capture output of `update` only to keep spec output clean.
94
- # The test regarding specific output is above.
95
- expect { subject.update }.to output.to_stdout
91
+ }.to output("failed to update #{database_path.inspect}").to_stderr
96
92
  }.to raise_error(SystemExit) do |error|
97
93
  expect(error.success?).to eq(false)
98
94
  expect(error.status).to eq(1)
@@ -136,9 +132,7 @@ describe Bundler::Audit::CLI do
136
132
 
137
133
  context "when update succeeds" do
138
134
  before do
139
- expect(database).to(
140
- receive(:update!).with(quiet: true).and_return(true)
141
- )
135
+ expect(database).to receive(:update!).with(quiet: true).and_return(true)
142
136
  end
143
137
 
144
138
  it "does not print any output" do
@@ -148,25 +142,17 @@ describe Bundler::Audit::CLI do
148
142
 
149
143
  context "when update fails" do
150
144
  before do
151
- expect(database).to(
152
- receive(:update!).with(quiet: true).and_return(false)
145
+ expect(database).to receive(:update!).with(quiet: true).and_raise(
146
+ Bundler::Audit::Database::UpdateFailed,
147
+ "failed to update #{database_path.inspect}"
153
148
  )
154
149
  end
155
150
 
156
- it "prints failure message" do
151
+ it "must print the error message and exit with an error code" do
157
152
  expect {
158
- begin
153
+ expect {
159
154
  subject.update
160
- rescue SystemExit
161
- end
162
- }.to_not output.to_stderr
163
- end
164
-
165
- it "exits with error status code" do
166
- expect {
167
- # Capture output of `update` only to keep spec output clean.
168
- # The test regarding specific output is above.
169
- expect { subject.update }.to output.to_stdout
155
+ }.to output("failed to update: #{database_path.inspect}").to_stderr
170
156
  }.to raise_error(SystemExit) do |error|
171
157
  expect(error.success?).to eq(false)
172
158
  expect(error.status).to eq(1)
data/spec/scanner_spec.rb CHANGED
@@ -36,12 +36,12 @@ describe Scanner do
36
36
  end
37
37
 
38
38
  context "when the :ignore option is given" do
39
- subject { super().scan(ignore: ['OSVDB-89026']) }
39
+ subject { super().scan(ignore: ['CVE-2013-0156']) }
40
40
 
41
41
  it "should ignore the specified advisories" do
42
42
  ids = subject.map { |result| result.advisory.id }
43
43
 
44
- expect(ids).not_to include('OSVDB-89026')
44
+ expect(ids).not_to include('CVE-2013-0156')
45
45
  end
46
46
  end
47
47
  end
data/spec/task_spec.rb ADDED
@@ -0,0 +1,141 @@
1
+ require 'spec_helper'
2
+ require 'bundler/audit/task'
3
+
4
+ require 'rake'
5
+
6
+ describe Bundler::Audit::Task do
7
+ before { subject }
8
+
9
+ it "must define a 'bundle:audit:check' task" do
10
+ expect(Rake::Task['bundle:audit:check']).to_not be_nil
11
+ end
12
+
13
+ it "must define a 'bundle:audit:update' task" do
14
+ expect(Rake::Task['bundle:audit:update']).to_not be_nil
15
+ end
16
+
17
+ it "must define a 'bundle:audit' task" do
18
+ expect(Rake::Task['bundle:audit']).to_not be_nil
19
+ end
20
+
21
+ it "must define a 'bundler:audit:check' task" do
22
+ expect(Rake::Task['bundler:audit:check']).to_not be_nil
23
+ end
24
+
25
+ it "must define a 'bundler:audit:update' task" do
26
+ expect(Rake::Task['bundler:audit:update']).to_not be_nil
27
+ end
28
+
29
+ it "must define a 'bundler:audit' task" do
30
+ expect(Rake::Task['bundler:audit']).to_not be_nil
31
+ end
32
+
33
+ describe "#bundler_audit" do
34
+ let(:subcommand) { 'subcommand' }
35
+ context "when the command exits successfully" do
36
+ before do
37
+ allow(subject).to receive(:system).with('bundler-audit',subcommand).and_return(true)
38
+ end
39
+
40
+ it "must return true" do
41
+ expect(subject.bundler_audit(subcommand)).to be(true)
42
+ end
43
+ end
44
+
45
+ context "when there vulnerabilities are found" do
46
+ before do
47
+ allow(subject).to receive(:system).with('bundler-audit',subcommand).and_return(false)
48
+ end
49
+
50
+ it "must exit with a non-zero error code" do
51
+ expect(subject).to receive(:exit).with($?.exitstatus)
52
+
53
+ subject.bundler_audit(subcommand)
54
+ end
55
+ end
56
+
57
+ context "when the bundler-audit command cannot be executed" do
58
+ before do
59
+ allow(subject).to receive(:system).with('bundler-audit',subcommand).and_return(nil)
60
+ end
61
+
62
+ it do
63
+ expect {
64
+ subject.bundler_audit(subcommand)
65
+ }.to raise_error(described_class::CommandNotFound,"bundler-audit could not be executed")
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "#check" do
71
+ context "when the command exits successfully" do
72
+ before do
73
+ allow(subject).to receive(:system).with('bundler-audit','check').and_return(true)
74
+ end
75
+
76
+ it "must return true" do
77
+ expect(subject.check).to be(true)
78
+ end
79
+ end
80
+
81
+ context "when there vulnerabilities are found" do
82
+ before do
83
+ allow(subject).to receive(:system).with('bundler-audit','check').and_return(false)
84
+ end
85
+
86
+ it "must exit with a non-zero error code" do
87
+ expect(subject).to receive(:exit).with($?.exitstatus)
88
+
89
+ subject.check
90
+ end
91
+ end
92
+
93
+ context "when the bundler-audit command cannot be executed" do
94
+ before do
95
+ allow(subject).to receive(:system).with('bundler-audit','check').and_return(nil)
96
+ end
97
+
98
+ it do
99
+ expect {
100
+ subject.check
101
+ }.to raise_error(described_class::CommandNotFound,"bundler-audit could not be executed")
102
+ end
103
+ end
104
+ end
105
+
106
+ describe "#update" do
107
+ context "when the command exits successfully" do
108
+ before do
109
+ allow(subject).to receive(:system).with('bundler-audit','update').and_return(true)
110
+ end
111
+
112
+ it "must return true" do
113
+ expect(subject.update).to be(true)
114
+ end
115
+ end
116
+
117
+ context "when there vulnerabilities are found" do
118
+ before do
119
+ allow(subject).to receive(:system).with('bundler-audit','update').and_return(false)
120
+ end
121
+
122
+ it "must exit with a non-zero error code" do
123
+ expect(subject).to receive(:exit).with($?.exitstatus)
124
+
125
+ subject.update
126
+ end
127
+ end
128
+
129
+ context "when the bundler-audit command cannot be executed" do
130
+ before do
131
+ allow(subject).to receive(:system).with('bundler-audit','update').and_return(nil)
132
+ end
133
+
134
+ it do
135
+ expect {
136
+ subject.update
137
+ }.to raise_error(described_class::CommandNotFound,"bundler-audit could not be executed")
138
+ end
139
+ end
140
+ end
141
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler-audit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-20 00:00:00.000000000 Z
11
+ date: 2024-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -124,9 +124,10 @@ files:
124
124
  - spec/results/unpatched_gem_spec.rb
125
125
  - spec/scanner_spec.rb
126
126
  - spec/spec_helper.rb
127
+ - spec/task_spec.rb
127
128
  homepage: https://github.com/rubysec/bundler-audit#readme
128
129
  licenses:
129
- - GPL-3.0+
130
+ - GPL-3.0-or-later
130
131
  metadata:
131
132
  rubygems_mfa_required: 'true'
132
133
  post_install_message:
@@ -144,23 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
145
  - !ruby/object:Gem::Version
145
146
  version: 1.8.0
146
147
  requirements: []
147
- rubygems_version: 3.2.33
148
+ rubygems_version: 3.5.11
148
149
  signing_key:
149
150
  specification_version: 4
150
151
  summary: Patch-level verification for Bundler
151
- test_files:
152
- - spec/advisory_spec.rb
153
- - spec/audit_spec.rb
154
- - spec/cli/formats/json_spec.rb
155
- - spec/cli/formats/junit_spec.rb
156
- - spec/cli/formats/text_spec.rb
157
- - spec/cli/formats_spec.rb
158
- - spec/cli_spec.rb
159
- - spec/configuration_spec.rb
160
- - spec/database_spec.rb
161
- - spec/integration_spec.rb
162
- - spec/report_spec.rb
163
- - spec/results/insecure_source_spec.rb
164
- - spec/results/result_spec.rb
165
- - spec/results/unpatched_gem_spec.rb
166
- - spec/scanner_spec.rb
152
+ test_files: []