summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index b9045bc767..ace7aeeb3f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -913,6 +913,12 @@ public class ReceiveCommits implements PreReceiveHook, PostReceiveHook {
final List<String> idList = c.getFooterLines(CHANGE_ID);
if (!idList.isEmpty()) {
final String idStr = idList.get(idList.size() - 1).trim();
+ if (idStr.matches("^I00*$")) {
+ // Reject this invalid line from EGit.
+ reject(newChange, "invalid Change-Id");
+ return;
+ }
+
final Change.Key key = new Change.Key(idStr);
if (newChangeIds.contains(key)) {
@@ -944,6 +950,11 @@ public class ReceiveCommits implements PreReceiveHook, PostReceiveHook {
}
if (changes.size() == 0) {
+ if (!isValidChangeId(idStr)) {
+ reject(newChange, "invalid Change-Id");
+ return;
+ }
+
newChangeIds.add(key);
}
}
@@ -984,6 +995,10 @@ public class ReceiveCommits implements PreReceiveHook, PostReceiveHook {
newChange.setResult(ReceiveCommand.Result.OK);
}
+ private static boolean isValidChangeId(String idStr) {
+ return idStr.matches("^I[0-9a-fA-F]{40}$") && !idStr.matches("^I00*$");
+ }
+
private void createChange(final RevWalk walk, final RevCommit c)
throws OrmException, IOException {
walk.parseBody(c);
@@ -998,7 +1013,7 @@ public class ReceiveCommits implements PreReceiveHook, PostReceiveHook {
try {
if (footerLine.matches(CHANGE_ID)) {
final String v = footerLine.getValue().trim();
- if (v.matches("^I[0-9a-f]{8,}.*$")) {
+ if (isValidChangeId(v)) {
changeKey = new Change.Key(v);
}
} else if (isReviewer(footerLine)) {