dependabot-maven 0.361.2 → 0.362.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 +4 -4
- data/lib/dependabot/maven/file_parser/property_value_finder.rb +57 -31
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6b2d3206a58a6877d490d4f996f43d1703de69920e76511741966fbc7272a5c2
|
|
4
|
+
data.tar.gz: 31322a8a1dccaaf04a38233d9b3f767469aebd741dfd0081131fde8e94b8ad06
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c5ac97434660ab394d413523feb11dbd898478bf92d9eca00834b474a896f26e70db3fbe2d3a74b110042376eac57590c4d722d717c306ca02db7e86d9a47f29
|
|
7
|
+
data.tar.gz: 1f280b0cc45b41fed7f5831338df860add33a7b003e44c3568522955f32cfc9ccfb679640859c1e84b3d888ef623a70a371620cba031034ce03958524894e6a7
|
|
@@ -20,6 +20,7 @@ module Dependabot
|
|
|
20
20
|
require_relative "pom_fetcher"
|
|
21
21
|
|
|
22
22
|
DOT_SEPARATOR_REGEX = %r{\.(?!\d+([.\/_\-]|$)+)}
|
|
23
|
+
MAVEN_PROPERTY_REGEX = /\$\{.+?/
|
|
23
24
|
|
|
24
25
|
sig do
|
|
25
26
|
params(
|
|
@@ -37,10 +38,15 @@ module Dependabot
|
|
|
37
38
|
)
|
|
38
39
|
end
|
|
39
40
|
|
|
41
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
40
42
|
sig do
|
|
41
|
-
params(
|
|
43
|
+
params(
|
|
44
|
+
property_name: String,
|
|
45
|
+
callsite_pom: DependencyFile,
|
|
46
|
+
seen_properties: T::Set[String]
|
|
47
|
+
).returns(T.nilable(T::Hash[Symbol, T.untyped]))
|
|
42
48
|
end
|
|
43
|
-
def property_details(property_name:, callsite_pom:)
|
|
49
|
+
def property_details(property_name:, callsite_pom:, seen_properties: Set.new)
|
|
44
50
|
pom = callsite_pom
|
|
45
51
|
doc = Nokogiri::XML(pom.content)
|
|
46
52
|
doc.remove_namespaces!
|
|
@@ -63,53 +69,73 @@ module Dependabot
|
|
|
63
69
|
raise DependencyFileNotEvaluatable, e.message
|
|
64
70
|
end
|
|
65
71
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return extract_value_from_expression(
|
|
69
|
-
expression: node.content.strip,
|
|
72
|
+
if node.nil? && parent_pom(pom)
|
|
73
|
+
return property_details(
|
|
70
74
|
property_name: property_name,
|
|
71
|
-
callsite_pom:
|
|
75
|
+
callsite_pom: T.must(parent_pom(pom)),
|
|
76
|
+
seen_properties: seen_properties
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
# If the property can’t be resolved for any reason, we return nil which
|
|
80
|
+
# causes Dependabot to skip the dependency.
|
|
81
|
+
# This differs from Maven’s behavior, where an unresolved property would fail the entire build.
|
|
82
|
+
# We intentionally choose this as a compromise so Dependabot can continue parsing the rest of the project,
|
|
83
|
+
# rather than failing completely due to a single unknown property.
|
|
84
|
+
# The trade-off is that some dependencies may not be updated as expected.
|
|
85
|
+
Dependabot.logger.warn "Could not resolve property '#{property_name}'" unless node
|
|
86
|
+
return nil unless node
|
|
87
|
+
|
|
88
|
+
content = node.content.strip
|
|
89
|
+
|
|
90
|
+
# Detect infinite recursion such as ${property1} where property1=${property1}
|
|
91
|
+
if seen_properties.include?(property_name)
|
|
92
|
+
raise Dependabot::DependencyFileNotParseable.new(
|
|
93
|
+
callsite_pom.name,
|
|
94
|
+
"Error trying to resolve recursive expression '${#{property_name}}'."
|
|
72
95
|
)
|
|
73
96
|
end
|
|
74
97
|
|
|
75
|
-
|
|
76
|
-
return { file: pom.name, node: node, value: node.content.strip } if node
|
|
98
|
+
seen_properties << property_name
|
|
77
99
|
|
|
78
|
-
#
|
|
79
|
-
return
|
|
100
|
+
# If the content has no placeholders, return it as-is
|
|
101
|
+
return { file: pom.name, node: node, value: content } unless content.match?(MAVEN_PROPERTY_REGEX)
|
|
80
102
|
|
|
81
|
-
|
|
82
|
-
property_name: property_name,
|
|
83
|
-
callsite_pom: parent
|
|
84
|
-
)
|
|
103
|
+
resolve_property_placeholder(content, callsite_pom, pom, node, seen_properties)
|
|
85
104
|
end
|
|
105
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
|
86
106
|
|
|
87
107
|
private
|
|
88
108
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
109
|
+
# Extract property placeholders from a string and resolve them
|
|
110
|
+
# These properties can be simple properties such as ${project.version}
|
|
111
|
+
# or more complex such as ${my.property.${other.property}} or constant.${property}
|
|
112
|
+
# See https://maven.apache.org/pom.html#properties
|
|
92
113
|
sig do
|
|
93
114
|
params(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
115
|
+
content: String,
|
|
116
|
+
callsite_pom: DependencyFile,
|
|
117
|
+
pom: DependencyFile,
|
|
118
|
+
node: T.untyped,
|
|
119
|
+
seen_properties: T::Set[String]
|
|
120
|
+
).returns(T.nilable(T::Hash[Symbol, T.untyped]))
|
|
99
121
|
end
|
|
100
|
-
def
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
122
|
+
def resolve_property_placeholder(content, callsite_pom, pom, node, seen_properties)
|
|
123
|
+
resolved_value = content.gsub(/\$\{(.+?)}/) do
|
|
124
|
+
inner_name = Regexp.last_match(1)
|
|
125
|
+
resolved = property_details(
|
|
126
|
+
property_name: T.must(inner_name),
|
|
127
|
+
callsite_pom: callsite_pom,
|
|
128
|
+
seen_properties: seen_properties
|
|
106
129
|
)
|
|
130
|
+
T.must(resolved)[:value]
|
|
107
131
|
end
|
|
108
132
|
|
|
109
|
-
|
|
110
|
-
property_details(property_name: T.must(expression.slice(2..-2)), callsite_pom: callsite_pom)
|
|
133
|
+
{ file: pom.name, node: node, value: resolved_value }
|
|
111
134
|
end
|
|
112
135
|
|
|
136
|
+
sig { returns(T::Array[DependencyFile]) }
|
|
137
|
+
attr_reader :dependency_files
|
|
138
|
+
|
|
113
139
|
sig { params(property_name: String).returns(String) }
|
|
114
140
|
def sanitize_property_name(property_name)
|
|
115
141
|
property_name.sub(/^pom\./, "").sub(/^project\./, "")
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-maven
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.362.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.
|
|
18
|
+
version: 0.362.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.
|
|
25
|
+
version: 0.362.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: rexml
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -286,7 +286,7 @@ licenses:
|
|
|
286
286
|
- MIT
|
|
287
287
|
metadata:
|
|
288
288
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
289
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
289
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.362.0
|
|
290
290
|
rdoc_options: []
|
|
291
291
|
require_paths:
|
|
292
292
|
- lib
|