do not allow slashes ("/") in repository names

This commit is contained in:
Sebastian Sdorra
2019-03-12 08:27:57 +01:00
parent 8b8379551b
commit 7a171c8730
2 changed files with 23 additions and 69 deletions

View File

@@ -59,8 +59,9 @@ public final class ValidationUtil
"^[A-z0-9\\.\\-_@]|[^ ]([A-z0-9\\.\\-_@ ]*[A-z0-9\\.\\-_@]|[^ ])?$"; "^[A-z0-9\\.\\-_@]|[^ ]([A-z0-9\\.\\-_@ ]*[A-z0-9\\.\\-_@]|[^ ])?$";
/** Field description */ /** Field description */
private static final String REGEX_REPOSITORYNAME = private static final Pattern REGEX_REPOSITORYNAME = Pattern.compile(
"(?!^\\.\\.$)(?!^\\.$)(?!.*[\\\\\\[\\]])^[A-z0-9\\.][A-z0-9\\.\\-_/]*$"; "(?!^\\.\\.$)(?!^\\.$)(?!.*[\\\\\\[\\]])^[A-z0-9\\.][A-z0-9\\.\\-_]*$"
);
//~--- constructors --------------------------------------------------------- //~--- constructors ---------------------------------------------------------
@@ -142,37 +143,15 @@ public final class ValidationUtil
} }
/** /**
* Method description * Returns {@code true} if the repository name is valid.
* *
* * @param name repository name
* @param name
* @since 1.9 * @since 1.9
* *
* @return * @return {@code true} if repository name is valid
*/ */
public static boolean isRepositoryNameValid(String name) public static boolean isRepositoryNameValid(String name) {
{ return REGEX_REPOSITORYNAME.matcher(name).matches();
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;
} }
/** /**

View File

@@ -143,51 +143,21 @@ public class ValidationUtilTest
assertFalse(ValidationUtil.isNotContaining("test", "t")); assertFalse(ValidationUtil.isNotContaining("test", "t"));
} }
/**
* Method description
*
*/
@Test @Test
public void testIsRepositoryNameValid() 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-
String[] validPaths = { String[] validPaths = {
"scm", "scm",
"scm/main",
"scm/plugins/git-plugin",
"s", "s",
"sc", "sc",
".scm/plugins",
".hiddenrepo", ".hiddenrepo",
"b.", "b.",
"...", "...",
"..c", "..c",
"d..", "d..",
"a/b..", "a..c"
"a/..b",
"a..c",
}; };
// issue 142, 144 and 148
String[] invalidPaths = { String[] invalidPaths = {
".", ".",
"/", "/",
@@ -228,17 +198,22 @@ public class ValidationUtilTest
"abc)abc", "abc)abc",
"abc[abc", "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)); assertTrue(ValidationUtil.isRepositoryNameValid(path));
} }
for (String path : invalidPaths) for (String path : invalidPaths) {
{
assertFalse(ValidationUtil.isRepositoryNameValid(path)); assertFalse(ValidationUtil.isRepositoryNameValid(path));
} }
} }