diff --git a/aurweb/packages/util.py b/aurweb/packages/util.py index 2cc00db9..78d79508 100644 --- a/aurweb/packages/util.py +++ b/aurweb/packages/util.py @@ -1,6 +1,7 @@ from collections import defaultdict from http import HTTPStatus from typing import Tuple, Union +from urllib.parse import quote_plus import orjson from fastapi import HTTPException @@ -246,5 +247,5 @@ def source_uri(pkgsrc: models.PackageSource) -> Tuple[str, str]: elif "://" in pkgsrc.Source: return pkgsrc.Source, pkgsrc.Source path = config.get("options", "source_file_uri") - pkgbasename = pkgsrc.Package.PackageBase.Name + pkgbasename = quote_plus(pkgsrc.Package.PackageBase.Name) return pkgsrc.Source, path % (pkgsrc.Source, pkgbasename) diff --git a/test/test_packages_util.py b/test/test_packages_util.py index 23e85e1b..bae84614 100644 --- a/test/test_packages_util.py +++ b/test/test_packages_util.py @@ -109,6 +109,12 @@ def test_source_uri_file(package: Package): expected = source_file_uri % (pkgsrc.Source, package.PackageBase.Name) assert (file, uri) == (FILE, expected) + # test URL encoding + pkgsrc.Package.PackageBase.Name = "test++" + file, uri = util.source_uri(pkgsrc) + expected = source_file_uri % (pkgsrc.Source, "test%2B%2B") + assert uri == expected + def test_source_uri_named_uri(package: Package): FILE = "test"