dependabot-nuget 0.100.2 → 0.101.0

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: bc810cea298983ce9c1c3bf8380c8ae533f96ebf5834ad289f39da1070a11fa4
4
- data.tar.gz: 0b35e5986a7b7321a811dc8d8b166b3a949b05bd2092c428d0ce2451169c549f
3
+ metadata.gz: b6127f346f242e91f4d6d8dc9d1ce6d11d543ed63fc32727f6a8138af185d775
4
+ data.tar.gz: b832964c19dcbd0de3a20f89b06eaf2b298570399de786538a215f70b0e37728
5
5
  SHA512:
6
- metadata.gz: e8b433771c9d5ee0dc689468f04ea067961e6b4681f9fe77ef7c31f257fcbc8ee955dbf6b87a5a92c94497db99264690835ea99d37354db1329d6309eac961e8
7
- data.tar.gz: 6dbe5845c9fe7e5f71b92ff1fce6b541b50e42731ce27e8284afc983b92105e36f2c91aad325daf2ee55372356bcead83a3cea8567b38c304909c4602f94920d
6
+ metadata.gz: 13f11948ec57a58bf63f4d1a0991de9d208f33f18d7cc35b2b6520a0657d3f834d305f130e4976cb25998eb76b67809341ddc6f42ff81e1e97fee770109d63bd
7
+ data.tar.gz: '0386b5365781008d232db19a91d3b2fc4a6ad0851091cbb25da89693bc2cf68b2195eae43510b7bdeb72ec7951c9112b2be3e0bef8cf76ce3d77723ecfc6f37f'
@@ -22,6 +22,12 @@ module Dependabot
22
22
  latest_version
23
23
  end
24
24
 
25
+ def lowest_resolvable_security_fix_version
26
+ return nil if version_comes_from_multi_dependency_property?
27
+
28
+ lowest_security_fix_version_details&.fetch(:version)
29
+ end
30
+
25
31
  def latest_resolvable_version_with_no_unlock
26
32
  # Irrelevant, since Nuget has a single dependency file
27
33
  nil
@@ -30,8 +36,8 @@ module Dependabot
30
36
  def updated_requirements
31
37
  RequirementsUpdater.new(
32
38
  requirements: dependency.requirements,
33
- latest_version: latest_version&.to_s,
34
- source_details: latest_version_details&.
39
+ latest_version: preferred_resolvable_version&.to_s,
40
+ source_details: preferred_version_details&.
35
41
  slice(:nuspec_url, :repo_url, :source_url)
36
42
  ).updated_requirements
37
43
  end
@@ -67,17 +73,29 @@ module Dependabot
67
73
  property_updater.updated_dependencies
68
74
  end
69
75
 
76
+ def preferred_version_details
77
+ return lowest_security_fix_version_details if vulnerable?
78
+
79
+ latest_version_details
80
+ end
81
+
70
82
  def latest_version_details
71
83
  @latest_version_details ||= version_finder.latest_version_details
72
84
  end
73
85
 
86
+ def lowest_security_fix_version_details
87
+ @lowest_security_fix_version_details ||=
88
+ version_finder.lowest_security_fix_version_details
89
+ end
90
+
74
91
  def version_finder
75
92
  @version_finder ||=
76
93
  VersionFinder.new(
77
94
  dependency: dependency,
78
95
  dependency_files: dependency_files,
79
96
  credentials: credentials,
80
- ignored_versions: ignored_versions
97
+ ignored_versions: ignored_versions,
98
+ security_advisories: security_advisories
81
99
  )
82
100
  end
83
101
 
@@ -30,7 +30,8 @@ module Dependabot
30
30
  dependency: dep,
31
31
  dependency_files: dependency_files,
32
32
  credentials: credentials,
33
- ignored_versions: ignored_versions
33
+ ignored_versions: ignored_versions,
34
+ security_advisories: []
34
35
  ).versions.map { |v| v.fetch(:version) }
35
36
 
36
37
  versions.include?(target_version) || versions.none?
@@ -15,25 +15,33 @@ module Dependabot
15
15
  require_relative "repository_finder"
16
16
 
17
17
  def initialize(dependency:, dependency_files:, credentials:,
18
- ignored_versions: [])
19
- @dependency = dependency
20
- @dependency_files = dependency_files
21
- @credentials = credentials
22
- @ignored_versions = ignored_versions
18
+ ignored_versions:, security_advisories:)
19
+ @dependency = dependency
20
+ @dependency_files = dependency_files
21
+ @credentials = credentials
22
+ @ignored_versions = ignored_versions
23
+ @security_advisories = security_advisories
23
24
  end
24
25
 
25
26
  def latest_version_details
26
27
  @latest_version_details ||=
27
28
  begin
28
- tmp_versions = versions
29
- tmp_versions.reject! do |d|
30
- version = d.fetch(:version)
31
- version.prerelease? && !related_to_current_pre?(version)
32
- end
33
- tmp_versions.reject! do |hash|
34
- ignore_reqs.any? { |r| r.satisfied_by?(hash.fetch(:version)) }
35
- end
36
- tmp_versions.max_by { |hash| hash.fetch(:version) }
29
+ possible_versions = versions
30
+ possible_versions = filter_prereleases(possible_versions)
31
+ possible_versions = filter_ignored_versions(possible_versions)
32
+ possible_versions.max_by { |hash| hash.fetch(:version) }
33
+ end
34
+ end
35
+
36
+ def lowest_security_fix_version_details
37
+ @lowest_security_fix_version_details ||=
38
+ begin
39
+ possible_versions = versions
40
+ possible_versions = filter_prereleases(possible_versions)
41
+ possible_versions = filter_ignored_versions(possible_versions)
42
+ possible_versions = filter_vulnerable_versions(possible_versions)
43
+ possible_versions = filter_lower_versions(possible_versions)
44
+ possible_versions.min_by { |hash| hash.fetch(:version) }
37
45
  end
38
46
  end
39
47
 
@@ -42,10 +50,48 @@ module Dependabot
42
50
  end
43
51
 
44
52
  attr_reader :dependency, :dependency_files, :credentials,
45
- :ignored_versions
53
+ :ignored_versions, :security_advisories
46
54
 
47
55
  private
48
56
 
57
+ def filter_prereleases(possible_versions)
58
+ possible_versions.reject do |d|
59
+ version = d.fetch(:version)
60
+ version.prerelease? && !related_to_current_pre?(version)
61
+ end
62
+ end
63
+
64
+ def filter_ignored_versions(possible_versions)
65
+ versions_array = possible_versions
66
+
67
+ ignored_versions.each do |req|
68
+ ignore_req = requirement_class.new(req.split(","))
69
+ versions_array =
70
+ versions_array.
71
+ reject { |v| ignore_req.satisfied_by?(v.fetch(:version)) }
72
+ end
73
+
74
+ versions_array
75
+ end
76
+
77
+ def filter_vulnerable_versions(possible_versions)
78
+ versions_array = possible_versions
79
+
80
+ security_advisories.each do |advisory|
81
+ versions_array =
82
+ versions_array.
83
+ reject { |v| advisory.vulnerable?(v.fetch(:version)) }
84
+ end
85
+
86
+ versions_array
87
+ end
88
+
89
+ def filter_lower_versions(possible_versions)
90
+ possible_versions.select do |v|
91
+ v.fetch(:version) > version_class.new(dependency.version)
92
+ end
93
+ end
94
+
49
95
  def available_v3_versions
50
96
  v3_nuget_listings.flat_map do |listing|
51
97
  listing.
@@ -208,10 +254,6 @@ module Dependabot
208
254
  ).dependency_urls
209
255
  end
210
256
 
211
- def ignore_reqs
212
- ignored_versions.map { |req| requirement_class.new(req.split(",")) }
213
- end
214
-
215
257
  def nuget_config
216
258
  @nuget_config ||=
217
259
  dependency_files.find { |f| f.name.casecmp("nuget.config").zero? }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-nuget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.100.2
4
+ version: 0.101.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.100.2
19
+ version: 0.101.0
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: 0.100.2
26
+ version: 0.101.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement