mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-14 17:26:22 +01:00
do not allow slashes ("/") in repository names
This commit is contained in:
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user