Skip to content

Commit 34a8262

Browse files
authored
fix: alpine versions <=/>= (#3978)
The alpine versions seem to be falling back to string comparisons for `>=`/`<=`, which is wrong. This issue is in the univers code we've vendored, which seems to be a bit outdated, but it's [still present on their current version](aboutcode-org/univers#172) I've added tests to catch this in Alpine and other ecosystems, but APK seems to have been the only ecosystem affected.
1 parent 48457e7 commit 34a8262

File tree

12 files changed

+78
-0
lines changed

12 files changed

+78
-0
lines changed

osv/ecosystems/alpine_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ def test_apk(self):
7575
self.assertLess(
7676
ecosystem.sort_key('13.0.14.5-r1'), ecosystem.sort_key('16.6-r0'))
7777

78+
# Check >= / <= methods: https://github.com/google/osv.dev/pull/3978
79+
self.assertGreaterEqual(
80+
ecosystem.sort_key('1.10.0-r0'), ecosystem.sort_key('1.2.0-r0'))
81+
self.assertLessEqual(
82+
ecosystem.sort_key('1.2.0-r0'), ecosystem.sort_key('1.10.0-r0'))
83+
7884
def test_apk_ecosystems(self):
7985
"""Test apk-based ecosystems return an APK ecosystem."""
8086
ecos = [

osv/ecosystems/debian_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ def test_dpkg(self):
7272
self.assertLess(
7373
ecosystem.sort_key("13.0.14.5-e1"), ecosystem.sort_key("16.6-e0"))
7474

75+
# Check >= / <= methods
76+
self.assertGreaterEqual(
77+
ecosystem.sort_key('1.10.0-1'), ecosystem.sort_key('1.2.0-1'))
78+
self.assertLessEqual(
79+
ecosystem.sort_key('1.2.0-1'), ecosystem.sort_key('1.10.0-1'))
80+
7581
def test_dpkg_ecosystems(self):
7682
"""Test dpkg-based ecosystems return a DPKG ecosystem."""
7783
ecos = [

osv/ecosystems/haskell_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ def test_sort_key(self):
4242
self.assertGreater(
4343
ecosystem.sort_key('1-20-0'), ecosystem.sort_key('1.20.0'))
4444

45+
# Check >= / <= methods
46+
self.assertGreaterEqual(
47+
ecosystem.sort_key('1-20-0'), ecosystem.sort_key('1.20.0'))
48+
self.assertLessEqual(
49+
ecosystem.sort_key('1.20.0'), ecosystem.sort_key('1-20-0'))
50+
4551

4652
class GHCEcosystemTest(vcr.unittest.VCRTestCase):
4753
"""GHC ecosystem helper tests."""

osv/ecosystems/maven_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,13 @@ def test_version_zero(self):
241241
# actual case from com.graphql-java:graphql-java
242242
self.check_versions_order('0.0.0-2021-05-17T01-01-51-5ec03a8b', '20.0.0')
243243

244+
def test_version_ge_le(self):
245+
"""Test >= and <=."""
246+
self.assertGreaterEqual(
247+
maven.Version.from_string('1.10.0'), maven.Version.from_string('1.2.0'))
248+
self.assertLessEqual(
249+
maven.Version.from_string('1.2.0'), maven.Version.from_string('1.10.0'))
250+
244251

245252
class MavenEcosystemTest(vcr.unittest.VCRTestCase):
246253
"""Maven ecosystem helper tests."""

osv/ecosystems/nuget_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ def test_less(self):
8484
self.check_order(self.assertLess, '1.0.0', '1.0.0.1-alpha')
8585
self.check_order(self.assertLess, '0.9.9.1', '1.0.0')
8686

87+
def test_ge_le(self):
88+
"""Test version >=/<=."""
89+
self.check_order(self.assertGreaterEqual, '1.10.0', '1.2.0')
90+
self.check_order(self.assertLessEqual, '1.2.0', '1.10.0')
91+
8792

8893
class NuGetEcosystemTest(vcr.unittest.VCRTestCase):
8994
"""NuGet ecosystem helper tests."""

osv/ecosystems/packagist_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ def test_packagist(self):
3939
self.assertEqual(
4040
ecosystem.sort_key('1.0.0rc2'), ecosystem.sort_key('1.0.0.rc2'))
4141

42+
# Check >= / <= methods
43+
self.assertGreaterEqual(
44+
ecosystem.sort_key('1.10-2RC1'), ecosystem.sort_key('1.2-2RC1'))
45+
self.assertLessEqual(
46+
ecosystem.sort_key('1.2-2RC1'), ecosystem.sort_key('1.10-2RC1'))
47+
4248
enumerated_versions = ecosystem.enumerate_versions('neos/neos', '3.3.0',
4349
'4.4.0')
4450
self.assertIn('4.3.19', enumerated_versions)

osv/ecosystems/pub_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ def check_version_equals(v1, v2):
5959
check_version_equals('1.2.3-01', '1.2.3-1')
6060
check_version_equals('1.2.3+01', '1.2.3+1')
6161

62+
def test_ge_le(self):
63+
"""Test version >=/<=."""
64+
self.assertGreaterEqual(
65+
pub.Version.from_string('1.10.0'), pub.Version.from_string('1.2.0'))
66+
self.assertLessEqual(
67+
pub.Version.from_string('1.2.0'), pub.Version.from_string('1.10.0'))
68+
6269
def test_parse(self):
6370
"""Test versions can be parsed."""
6471
pub.Version.from_string('0.0.0')

osv/ecosystems/pypi_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,8 @@ def test_sort_key(self):
3939
ecosystem = ecosystems.get('PyPI')
4040
self.assertGreater(ecosystem.sort_key('2.0.0'), ecosystem.sort_key('1.0.0'))
4141
self.assertLess(ecosystem.sort_key('invalid'), ecosystem.sort_key('0'))
42+
# Check >= / <= methods
43+
self.assertGreaterEqual(
44+
ecosystem.sort_key('1.10.0'), ecosystem.sort_key('1.2.0'))
45+
self.assertLessEqual(
46+
ecosystem.sort_key('1.2.0'), ecosystem.sort_key('1.10.0'))

osv/ecosystems/redhat_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,14 @@ def test_rpm(self):
111111
self.assertEqual(
112112
ecosystem.sort_key("2.0.8-4.8.2"), ecosystem.sort_key("2.0.8-4.8.2"))
113113

114+
# Check >= / <= methods
115+
self.assertGreaterEqual(
116+
ecosystem.sort_key('1.10.2-1.oe2203'),
117+
ecosystem.sort_key('1.2.2-1.oe2203'))
118+
self.assertLessEqual(
119+
ecosystem.sort_key('1.2.2-1.oe2203'),
120+
ecosystem.sort_key('1.10.2-1.oe2203'))
121+
114122
def test_rpm_ecosystems(self):
115123
"""Test RPM-based ecosystems return an RPM ecosystem."""
116124
ecos = [

osv/ecosystems/rubygems_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,8 @@ def test_sort_key(self):
4545
ecosystem.sort_key('invalid'), ecosystem.sort_key('4.0.0.rc1'))
4646
self.assertGreater(
4747
ecosystem.sort_key('v3.1.1'), ecosystem.sort_key('4.0.0.rc1'))
48+
# Check >= / <= methods
49+
self.assertGreaterEqual(
50+
ecosystem.sort_key('1.10.0.rc1'), ecosystem.sort_key('1.2.0.rc1'))
51+
self.assertLessEqual(
52+
ecosystem.sort_key('1.2.0.rc1'), ecosystem.sort_key('1.10.0.rc1'))

0 commit comments

Comments
 (0)