mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-08 14:35:45 +01:00
check repository path of hg hooks is in the hg directory, instead of path length check
This commit is contained in:
@@ -103,20 +103,22 @@ public final class RepositoryUtil
|
|||||||
|
|
||||||
public static String getRepositoryId(File baseDirectory, File directory) throws IOException {
|
public static String getRepositoryId(File baseDirectory, File directory) throws IOException {
|
||||||
String path = directory.getCanonicalPath();
|
String path = directory.getCanonicalPath();
|
||||||
int directoryLength = baseDirectory.getCanonicalPath().length();
|
String basePath = baseDirectory.getCanonicalPath();
|
||||||
|
|
||||||
|
Preconditions.checkArgument(
|
||||||
|
path.startsWith(basePath),
|
||||||
|
"repository path %s is not in the main repository path %s", path, basePath
|
||||||
|
);
|
||||||
|
|
||||||
|
String id = IOUtil.trimSeperatorChars(path.substring(basePath.length()));
|
||||||
|
|
||||||
|
Preconditions.checkArgument(
|
||||||
|
!id.contains("\\") && !id.contains("/"),
|
||||||
|
"got illegal repository directory with separators in id: %s", path
|
||||||
|
);
|
||||||
|
|
||||||
if (directoryLength < path.length())
|
|
||||||
{
|
|
||||||
String id = IOUtil.trimSeperatorChars(path.substring(directoryLength));
|
|
||||||
Preconditions.checkState(!id.contains("\\") && !id.contains("/"),
|
|
||||||
"got illegal repository directory with separators in id: " + path);
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new IllegalStateException("path is shorter as the main repository path");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void searchRepositoryDirectories(List<File> repositories,
|
private static void searchRepositoryDirectories(List<File> repositories,
|
||||||
File directory, List<String> names)
|
File directory, List<String> names)
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package sonia.scm.repository;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.TemporaryFolder;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.runners.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
|
public class RepositoryUtilTest {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private AbstractRepositoryHandler<SimpleRepositoryConfig> repositoryHandler;
|
||||||
|
|
||||||
|
private SimpleRepositoryConfig repositoryConfig = new SimpleRepositoryConfig();
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUpMocks() {
|
||||||
|
when(repositoryHandler.getConfig()).thenReturn(repositoryConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetRepositoryId() throws IOException {
|
||||||
|
File repositoryTypeRoot = temporaryFolder.newFolder();
|
||||||
|
repositoryConfig.setRepositoryDirectory(repositoryTypeRoot);
|
||||||
|
|
||||||
|
File repository = new File(repositoryTypeRoot, "abc");
|
||||||
|
String id = RepositoryUtil.getRepositoryId(repositoryHandler, repository.getPath());
|
||||||
|
assertEquals("abc", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void testGetRepositoryIdWithInvalidPath() throws IOException {
|
||||||
|
File repositoryTypeRoot = temporaryFolder.newFolder();
|
||||||
|
repositoryConfig.setRepositoryDirectory(repositoryTypeRoot);
|
||||||
|
|
||||||
|
File repository = new File("/etc/abc");
|
||||||
|
String id = RepositoryUtil.getRepositoryId(repositoryHandler, repository.getPath());
|
||||||
|
assertEquals("abc", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void testGetRepositoryIdWithInvalidPathButSameLength() throws IOException {
|
||||||
|
File repositoryTypeRoot = temporaryFolder.newFolder();
|
||||||
|
repositoryConfig.setRepositoryDirectory(repositoryTypeRoot);
|
||||||
|
|
||||||
|
System.out.println(repositoryTypeRoot);
|
||||||
|
|
||||||
|
File repository = new File(temporaryFolder.newFolder(), "abc");
|
||||||
|
System.out.println(repository);
|
||||||
|
|
||||||
|
String id = RepositoryUtil.getRepositoryId(repositoryHandler, repository.getPath());
|
||||||
|
assertEquals("abc", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user