aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org
diff options
context:
space:
mode:
authorIvan Frade <ifrade@google.com>2018-10-08 15:42:47 -0700
committerIvan Frade <ifrade@google.com>2018-10-09 13:48:47 -0700
commit39b27f7c7b99499702db6e86ccfacf448a3231bf (patch)
treeebcb79ff7b5cbc5a2c65c88bf587a8fd7354d7f2 /org.eclipse.jgit.test/tst/org
parent7aebb6779c19d0c62a1c11fa89d19a1e5a03ea1c (diff)
downloadjgit-39b27f7c7b99499702db6e86ccfacf448a3231bf.tar.gz
jgit-39b27f7c7b99499702db6e86ccfacf448a3231bf.zip
DfsFsck: Check that .gitmodules in the repository have valid contents
Previous commits block the addition to the repo of dangerous .gitmodules files, but some could have been committed before those safeguards where in place. Add a check in DfsFsck to validate the .gitmodules files in the repo. Use the same validation than the ReceivePack, translating the results to FsckErrors. Note that *all* .gitmodules files in the storage will be checked, not only the latest version. Change-Id: I040cf1f31a779419aad0292ba5e6e76eb7f32b66 Signed-off-by: Ivan Frade <ifrade@google.com>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsFsckTest.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsFsckTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsFsckTest.java
index 804d744ae2..c1811251c6 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsFsckTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsFsckTest.java
@@ -266,4 +266,59 @@ public class DfsFsckTest {
"refs/heads/master");
}
+ private ObjectId insertGitModules(String contents) throws IOException {
+ ObjectId blobId = ins.insert(Constants.OBJ_BLOB,
+ Constants.encode(contents));
+
+ byte[] blobIdBytes = new byte[OBJECT_ID_LENGTH];
+ blobId.copyRawTo(blobIdBytes, 0);
+ byte[] data = concat(encodeASCII("100644 .gitmodules\0"), blobIdBytes);
+ ins.insert(Constants.OBJ_TREE, data);
+ ins.flush();
+
+ return blobId;
+ }
+
+ @Test
+ public void testInvalidGitModules() throws Exception {
+ String fakeGitmodules = new StringBuilder()
+ .append("[submodule \"test\"]\n")
+ .append(" path = xlib\n")
+ .append(" url = https://example.com/repo/xlib.git\n\n")
+ .append("[submodule \"test2\"]\n")
+ .append(" path = zlib\n")
+ .append(" url = -upayload.sh\n")
+ .toString();
+
+ ObjectId blobId = insertGitModules(fakeGitmodules);
+
+ DfsFsck fsck = new DfsFsck(repo);
+ FsckError errors = fsck.check(null);
+ assertEquals(errors.getCorruptObjects().size(), 1);
+
+ CorruptObject error = errors.getCorruptObjects().iterator().next();
+ assertEquals(error.getId(), blobId);
+ assertEquals(error.getType(), Constants.OBJ_BLOB);
+ assertEquals(error.getErrorType(), ErrorType.GITMODULES_URL);
+ }
+
+
+ @Test
+ public void testValidGitModules() throws Exception {
+ String fakeGitmodules = new StringBuilder()
+ .append("[submodule \"test\"]\n")
+ .append(" path = xlib\n")
+ .append(" url = https://example.com/repo/xlib.git\n\n")
+ .append("[submodule \"test2\"]\n")
+ .append(" path = zlib\n")
+ .append(" url = ok/path\n")
+ .toString();
+
+ insertGitModules(fakeGitmodules);
+
+ DfsFsck fsck = new DfsFsck(repo);
+ FsckError errors = fsck.check(null);
+ assertEquals(errors.getCorruptObjects().size(), 0);
+ }
+
}