From a60e1006f5a0629eb620d6f667b86cb9351194d5 Mon Sep 17 00:00:00 2001 From: Gary O'Neall Date: Thu, 10 Jun 2021 21:02:49 -0700 Subject: [PATCH] Resolve issue #53 - fix regex for git download locations Signed-off-by: Gary O'Neall --- .../java/org/spdx/library/SpdxConstants.java | 2 +- .../spdx/library/model/SpdxPackageTest.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/spdx/library/SpdxConstants.java b/src/main/java/org/spdx/library/SpdxConstants.java index 453c56cba..bf0b0f2a1 100644 --- a/src/main/java/org/spdx/library/SpdxConstants.java +++ b/src/main/java/org/spdx/library/SpdxConstants.java @@ -361,7 +361,7 @@ public class SpdxConstants { // Download Location Format private static final String SUPPORTED_DOWNLOAD_REPOS = "(git|hg|svn|bzr)"; private static final String URL_PATTERN = "(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/|ssh:\\/\\/|git:\\/\\/|svn:\\/\\/|sftp:\\/\\/|ftp:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+){0,100}\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)"; - private static final String GIT_PATTERN = "(git\\+git@[a-zA-Z0-9\\.]+:[a-zA-Z0-9]+)"; + private static final String GIT_PATTERN = "(git\\+git@[a-zA-Z0-9\\.]+:[a-zA-Z0-9/\\\\.@]+)"; private static final String BAZAAR_PATTERN = "(bzr\\+lp:[a-zA-Z0-9\\.]+)"; public static final Pattern DOWNLOAD_LOCATION_PATTERN = Pattern.compile("^(NONE|NOASSERTION|(("+SUPPORTED_DOWNLOAD_REPOS+"\\+)?"+URL_PATTERN+")|"+GIT_PATTERN+"|"+BAZAAR_PATTERN+")$", Pattern.CASE_INSENSITIVE); diff --git a/src/test/java/org/spdx/library/model/SpdxPackageTest.java b/src/test/java/org/spdx/library/model/SpdxPackageTest.java index bf5d7aa0b..89d4d374c 100644 --- a/src/test/java/org/spdx/library/model/SpdxPackageTest.java +++ b/src/test/java/org/spdx/library/model/SpdxPackageTest.java @@ -1454,5 +1454,26 @@ public void testSetNameString() throws InvalidSPDXAnalysisException { assertEquals(PKG_NAME2, pkg2.getName().get()); assertEquals(PKG_NAME2, pkg.getName().get()); } + + public void testDownloadPattern() { + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git://git.myproject.org/MyProject.git@master").matches()); + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git://git.myproject.org/MyOrg/MyProject.git@master").matches()); + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git+git@git.myproject.org:MyProject").matches()); + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git+git@git.myproject.org:MyOrg/MyProject").matches()); + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git+git@git.myproject.org:MyProject.git").matches()); + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git+git@git.myproject.org:MyOrg/MyProject.git").matches()); + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git+git@git.myproject.org:MyProject@main").matches()); + assertTrue(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "git+git@git.myproject.org:MyProject@6338c7a2525e055a05bae1580e4dd189c2feff7b").matches()); + assertFalse(SpdxConstants.DOWNLOAD_LOCATION_PATTERN.matcher( + "something@git.myproject.org:MyProject@6338c7a2525e055a05bae1580e4dd189c2feff7b").matches()); + } }