From 0db52cc8b6665508649a096336acfe4c7840d046 Mon Sep 17 00:00:00 2001 From: Ali Zulfiqar Date: Sat, 5 Sep 2026 21:59:39 +0500 Subject: [PATCH 1/2] Skip Swift archive URLs when namespace or version is missing Signed-off-by: Ali Zulfiqar --- src/packageurl/contrib/purl2url.py | 2 +- tests/contrib/test_purl2url.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/packageurl/contrib/purl2url.py b/src/packageurl/contrib/purl2url.py index 5806251..2c0dc31 100644 --- a/src/packageurl/contrib/purl2url.py +++ b/src/packageurl/contrib/purl2url.py @@ -510,7 +510,7 @@ def build_swift_download_url(purl): version = purl_data.version namespace = purl_data.namespace - if not (namespace or name or version): + if not (namespace and name and version): return return f"https://{namespace}/{name}/archive/{version}.zip" diff --git a/tests/contrib/test_purl2url.py b/tests/contrib/test_purl2url.py index b34348c..b206ed3 100644 --- a/tests/contrib/test_purl2url.py +++ b/tests/contrib/test_purl2url.py @@ -194,3 +194,27 @@ def test_purl2url_get_repo_url_with_invalid_purls(): with pytest.raises(Exception) as e_info: purl2url.get_repo_url(purl) assert "Invalid PURL" == e_info + + +@pytest.mark.parametrize( + "purl", + [ + "pkg:swift/github.com/apple/swift-nio", + "pkg:swift/swift-nio@2.0.0", + "pkg:swift/swift-nio", + ], +) +def test_swift_download_requires_namespace_and_version(purl): + assert purl2url.get_download_url(purl) is None + + +def test_swift_download_with_required_fields(): + assert ( + purl2url.get_download_url("pkg:swift/github.com/apple/swift-nio@2.0.0") + == "https://github.com/apple/swift-nio/archive/2.0.0.zip" + ) + + +def test_swift_download_missing_version_uses_download_qualifier(): + purl = "pkg:swift/github.com/apple/swift-nio" "?download_url=https://example.com/swift-nio.zip" + assert purl2url.get_download_url(purl) == "https://example.com/swift-nio.zip" From 9f205f76dfc68d0b098cf0dbd9b37927e3217a1f Mon Sep 17 00:00:00 2001 From: Ali Zulfiqar Date: Sat, 5 Sep 2026 22:32:32 +0500 Subject: [PATCH 2/2] Address review feedback on validation and fallback coverage Signed-off-by: Ali Zulfiqar --- tests/contrib/test_purl2url.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/contrib/test_purl2url.py b/tests/contrib/test_purl2url.py index b206ed3..358cfbc 100644 --- a/tests/contrib/test_purl2url.py +++ b/tests/contrib/test_purl2url.py @@ -218,3 +218,8 @@ def test_swift_download_with_required_fields(): def test_swift_download_missing_version_uses_download_qualifier(): purl = "pkg:swift/github.com/apple/swift-nio" "?download_url=https://example.com/swift-nio.zip" assert purl2url.get_download_url(purl) == "https://example.com/swift-nio.zip" + + +def test_swift_download_missing_namespace_uses_download_qualifier(): + purl = "pkg:swift/swift-nio@2.0.0?download_url=https://example.com/swift-nio.zip" + assert purl2url.get_download_url(purl) == "https://example.com/swift-nio.zip"