DirCacheCheckoutMaliciousPathTest: Open Git and RevWalk in t-w-r
Change-Id: Iacb4e25f0ada74b1a01e448216cb02c7ec18b2d7 Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
This commit is contained in:
parent
30c9ec88d1
commit
259dca06ec
|
@ -338,68 +338,69 @@ private void testMaliciousPathGoodSecondCheckout(String... paths) throws Excepti
|
||||||
*/
|
*/
|
||||||
private void testMaliciousPath(boolean good, boolean secondCheckout,
|
private void testMaliciousPath(boolean good, boolean secondCheckout,
|
||||||
String... path) throws GitAPIException, IOException {
|
String... path) throws GitAPIException, IOException {
|
||||||
Git git = new Git(db);
|
try (Git git = new Git(db);
|
||||||
ObjectInserter newObjectInserter;
|
RevWalk revWalk = new RevWalk(git.getRepository())) {
|
||||||
newObjectInserter = git.getRepository().newObjectInserter();
|
ObjectInserter newObjectInserter;
|
||||||
ObjectId blobId = newObjectInserter.insert(Constants.OBJ_BLOB,
|
newObjectInserter = git.getRepository().newObjectInserter();
|
||||||
"data".getBytes());
|
ObjectId blobId = newObjectInserter.insert(Constants.OBJ_BLOB,
|
||||||
newObjectInserter = git.getRepository().newObjectInserter();
|
"data".getBytes());
|
||||||
FileMode mode = FileMode.REGULAR_FILE;
|
newObjectInserter = git.getRepository().newObjectInserter();
|
||||||
ObjectId insertId = blobId;
|
FileMode mode = FileMode.REGULAR_FILE;
|
||||||
for (int i = path.length - 1; i >= 0; --i) {
|
ObjectId insertId = blobId;
|
||||||
TreeFormatter treeFormatter = new TreeFormatter();
|
for (int i = path.length - 1; i >= 0; --i) {
|
||||||
treeFormatter.append("goodpath", mode, insertId);
|
TreeFormatter treeFormatter = new TreeFormatter();
|
||||||
insertId = newObjectInserter.insert(treeFormatter);
|
treeFormatter.append("goodpath", mode, insertId);
|
||||||
mode = FileMode.TREE;
|
insertId = newObjectInserter.insert(treeFormatter);
|
||||||
}
|
mode = FileMode.TREE;
|
||||||
newObjectInserter = git.getRepository().newObjectInserter();
|
}
|
||||||
CommitBuilder commitBuilder = new CommitBuilder();
|
newObjectInserter = git.getRepository().newObjectInserter();
|
||||||
commitBuilder.setAuthor(author);
|
CommitBuilder commitBuilder = new CommitBuilder();
|
||||||
commitBuilder.setCommitter(committer);
|
commitBuilder.setAuthor(author);
|
||||||
commitBuilder.setMessage("foo#1");
|
commitBuilder.setCommitter(committer);
|
||||||
commitBuilder.setTreeId(insertId);
|
commitBuilder.setMessage("foo#1");
|
||||||
ObjectId firstCommitId = newObjectInserter.insert(commitBuilder);
|
commitBuilder.setTreeId(insertId);
|
||||||
|
ObjectId firstCommitId = newObjectInserter.insert(commitBuilder);
|
||||||
newObjectInserter = git.getRepository().newObjectInserter();
|
|
||||||
mode = FileMode.REGULAR_FILE;
|
newObjectInserter = git.getRepository().newObjectInserter();
|
||||||
insertId = blobId;
|
mode = FileMode.REGULAR_FILE;
|
||||||
for (int i = path.length - 1; i >= 0; --i) {
|
insertId = blobId;
|
||||||
TreeFormatter treeFormatter = new TreeFormatter();
|
for (int i = path.length - 1; i >= 0; --i) {
|
||||||
treeFormatter.append(path[i], mode, insertId);
|
TreeFormatter treeFormatter = new TreeFormatter();
|
||||||
insertId = newObjectInserter.insert(treeFormatter);
|
treeFormatter.append(path[i], mode, insertId);
|
||||||
mode = FileMode.TREE;
|
insertId = newObjectInserter.insert(treeFormatter);
|
||||||
}
|
mode = FileMode.TREE;
|
||||||
|
}
|
||||||
// Create another commit
|
|
||||||
commitBuilder = new CommitBuilder();
|
// Create another commit
|
||||||
commitBuilder.setAuthor(author);
|
commitBuilder = new CommitBuilder();
|
||||||
commitBuilder.setCommitter(committer);
|
commitBuilder.setAuthor(author);
|
||||||
commitBuilder.setMessage("foo#2");
|
commitBuilder.setCommitter(committer);
|
||||||
commitBuilder.setTreeId(insertId);
|
commitBuilder.setMessage("foo#2");
|
||||||
commitBuilder.setParentId(firstCommitId);
|
commitBuilder.setTreeId(insertId);
|
||||||
ObjectId commitId = newObjectInserter.insert(commitBuilder);
|
commitBuilder.setParentId(firstCommitId);
|
||||||
|
ObjectId commitId = newObjectInserter.insert(commitBuilder);
|
||||||
RevWalk revWalk = new RevWalk(git.getRepository());
|
|
||||||
if (!secondCheckout)
|
if (!secondCheckout)
|
||||||
git.checkout().setStartPoint(revWalk.parseCommit(firstCommitId))
|
git.checkout().setStartPoint(revWalk.parseCommit(firstCommitId))
|
||||||
.setName("refs/heads/master").setCreateBranch(true).call();
|
.setName("refs/heads/master").setCreateBranch(true).call();
|
||||||
try {
|
try {
|
||||||
if (secondCheckout) {
|
if (secondCheckout) {
|
||||||
git.checkout().setStartPoint(revWalk.parseCommit(commitId))
|
git.checkout().setStartPoint(revWalk.parseCommit(commitId))
|
||||||
.setName("refs/heads/master").setCreateBranch(true)
|
.setName("refs/heads/master").setCreateBranch(true)
|
||||||
.call();
|
.call();
|
||||||
} else {
|
} else {
|
||||||
git.branchCreate().setName("refs/heads/next")
|
git.branchCreate().setName("refs/heads/next")
|
||||||
.setStartPoint(commitId.name()).call();
|
.setStartPoint(commitId.name()).call();
|
||||||
git.checkout().setName("refs/heads/next")
|
git.checkout().setName("refs/heads/next")
|
||||||
.call();
|
.call();
|
||||||
|
}
|
||||||
|
if (!good)
|
||||||
|
fail("Checkout of Tree " + Arrays.asList(path) + " should fail");
|
||||||
|
} catch (InvalidPathException e) {
|
||||||
|
if (good)
|
||||||
|
throw e;
|
||||||
|
assertTrue(e.getMessage().startsWith("Invalid path"));
|
||||||
}
|
}
|
||||||
if (!good)
|
|
||||||
fail("Checkout of Tree " + Arrays.asList(path) + " should fail");
|
|
||||||
} catch (InvalidPathException e) {
|
|
||||||
if (good)
|
|
||||||
throw e;
|
|
||||||
assertTrue(e.getMessage().startsWith("Invalid path"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue