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\\.\\-_@]|[^ ])?$";
/** 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();
}
/**

View File

@@ -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));
}
}