From 7a171c8730a0671d45220bc272f63852b5ed9f2f Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 12 Mar 2019 08:27:57 +0100 Subject: [PATCH] do not allow slashes ("/") in repository names --- .../java/sonia/scm/util/ValidationUtil.java | 37 +++---------- .../sonia/scm/util/ValidationUtilTest.java | 55 +++++-------------- 2 files changed, 23 insertions(+), 69 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java b/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java index 09032e93e5..2dbf55287d 100644 --- a/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java @@ -59,8 +59,9 @@ public final class ValidationUtil "^[A-z0-9\\.\\-_@]|[^ ]([A-z0-9\\.\\-_@ ]*[A-z0-9\\.\\-_@]|[^ ])?$"; /** Field description */ - private static final String REGEX_REPOSITORYNAME = - "(?!^\\.\\.$)(?!^\\.$)(?!.*[\\\\\\[\\]])^[A-z0-9\\.][A-z0-9\\.\\-_/]*$"; + private static final Pattern REGEX_REPOSITORYNAME = Pattern.compile( + "(?!^\\.\\.$)(?!^\\.$)(?!.*[\\\\\\[\\]])^[A-z0-9\\.][A-z0-9\\.\\-_]*$" + ); //~--- constructors --------------------------------------------------------- @@ -142,37 +143,15 @@ public final class ValidationUtil } /** - * Method description + * Returns {@code true} if the repository name is valid. * - * - * @param name + * @param name repository name * @since 1.9 * - * @return + * @return {@code true} if repository name is valid */ - public static boolean isRepositoryNameValid(String name) - { - Pattern pattern = Pattern.compile(REGEX_REPOSITORYNAME); - boolean result = true; - - if (Util.isNotEmpty(name)) - { - for (String p : Splitter.on('/').split(name)) - { - if (!pattern.matcher(p).matches()) - { - result = false; - - break; - } - } - } - else - { - result = false; - } - - return result; + public static boolean isRepositoryNameValid(String name) { + return REGEX_REPOSITORYNAME.matcher(name).matches(); } /** diff --git a/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java b/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java index 3eaddf2d36..e62f208e58 100644 --- a/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java +++ b/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java @@ -143,51 +143,21 @@ public class ValidationUtilTest assertFalse(ValidationUtil.isNotContaining("test", "t")); } - /** - * Method description - * - */ @Test - public void testIsRepositoryNameValid() - { - assertTrue(ValidationUtil.isRepositoryNameValid("scm")); - assertTrue(ValidationUtil.isRepositoryNameValid("scm/main")); - assertTrue(ValidationUtil.isRepositoryNameValid("scm/plugins/git-plugin")); - assertTrue(ValidationUtil.isRepositoryNameValid("s")); - assertTrue(ValidationUtil.isRepositoryNameValid("sc")); - assertTrue(ValidationUtil.isRepositoryNameValid(".scm/plugins")); - - // issue 142 - assertFalse(ValidationUtil.isRepositoryNameValid(".")); - assertFalse(ValidationUtil.isRepositoryNameValid("/")); - assertFalse(ValidationUtil.isRepositoryNameValid("scm/plugins/.")); - assertFalse(ValidationUtil.isRepositoryNameValid("scm/../plugins")); - assertFalse(ValidationUtil.isRepositoryNameValid("scm/main/")); - assertFalse(ValidationUtil.isRepositoryNameValid("/scm/main/")); - - // issue 144 - assertFalse(ValidationUtil.isRepositoryNameValid("scm/./main")); - assertFalse(ValidationUtil.isRepositoryNameValid("scm//main")); - - // issue 148 - //J- + public void testIsRepositoryNameValid() { String[] validPaths = { "scm", - "scm/main", - "scm/plugins/git-plugin", "s", "sc", - ".scm/plugins", ".hiddenrepo", "b.", "...", "..c", "d..", - "a/b..", - "a/..b", - "a..c", + "a..c" }; - + + // issue 142, 144 and 148 String[] invalidPaths = { ".", "/", @@ -228,17 +198,22 @@ public class ValidationUtilTest "abc)abc", "abc[abc", "abc]abc", - "abc|abc" + "abc|abc", + "scm/main", + "scm/plugins/git-plugin", + ".scm/plugins", + "a/b..", + "a/..b", + "scm/main", + "scm/plugins/git-plugin", + "scm/plugins/git-plugin" }; - //J+ - for (String path : validPaths) - { + for (String path : validPaths) { assertTrue(ValidationUtil.isRepositoryNameValid(path)); } - for (String path : invalidPaths) - { + for (String path : invalidPaths) { assertFalse(ValidationUtil.isRepositoryNameValid(path)); } }