From 48e4137eba1678c40a4caa92d9148a9ade76ec90 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 18 Dec 2023 16:31:11 -0500 Subject: [PATCH] manifest_xml: do not allow / before : in scp-like syntax Since git doesn't treat these as ssh:// URIs, we shouldn't either. Bug: https://g-issues.gerritcodereview.com/issues/40010331 Change-Id: I001f49be30395187cac447d09cb5a6c29e95768b Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/398517 Tested-by: Mike Frysinger Reviewed-by: Jason Chang Commit-Queue: Mike Frysinger --- manifest_xml.py | 2 +- tests/test_manifest_xml.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/manifest_xml.py b/manifest_xml.py index edbebaa3..7e533a02 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -134,7 +134,7 @@ def normalize_url(url: str) -> str: parsed_url = urllib.parse.urlparse(url) # This matches patterns like "git@github.com:foo/bar". - scp_like_url_re = r"^[^:]+@[^:]+:[^/]+/" + scp_like_url_re = r"^[^/:]+@[^/:]+:[^/]+/" # If our URL is missing a schema and matches git's # SCP-like syntax we should convert it to a proper diff --git a/tests/test_manifest_xml.py b/tests/test_manifest_xml.py index 11c0c15e..6423bb96 100644 --- a/tests/test_manifest_xml.py +++ b/tests/test_manifest_xml.py @@ -1139,6 +1139,17 @@ class NormalizeUrlTests(ManifestParseTestCase): "http://foo.com/bar/baz", manifest_xml.normalize_url(url) ) + def test_has_leading_slash(self): + """SCP-like syntax except a / comes before the : which git disallows.""" + url = "/git@foo.com:bar/baf" + self.assertEqual(url, manifest_xml.normalize_url(url)) + + url = "gi/t@foo.com:bar/baf" + self.assertEqual(url, manifest_xml.normalize_url(url)) + + url = "git@fo/o.com:bar/baf" + self.assertEqual(url, manifest_xml.normalize_url(url)) + def test_has_no_scheme(self): """Deal with cases where we have no scheme, but we also aren't dealing with the git SCP-like syntax