SubmitRuleEvaluator: Fix NPE when patch set is not set cannotSubmitDraft() failed with a NullPointerException when patchSet was null. It was initialising the patch set, but too late and patchSet was already deferenced once. Since evaluate() is the only caller of cannotSubmitDraft() and it needs to initialize the patch set before invoking cannotSubmitDraft() anyway, the call to initialize the patch set in cannotSubmitDraft() can be removed. This was e.g. causing 500 Internal Server Error when an anonymous user was accessing a change with a draft. The request that failed was for the submitted_together REST endpoint. Bug: Issue 4796 Change-Id: I1fab717ad985e486409fdf4a5d8845aaefcb40f2 Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java index 9a5b61f..48cd7ee 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java
@@ -221,16 +221,13 @@ return Collections.singletonList(rec); } if (!opts.allowDraft()) { - if (c.getStatus() == Change.Status.DRAFT) { - return cannotSubmitDraft(); - } try { initPatchSet(); } catch (OrmException e) { return ruleError("Error looking up patch set " + control.getChange().currentPatchSetId(), e); } - if (patchSet.isDraft()) { + if (c.getStatus() == Change.Status.DRAFT || patchSet.isDraft()) { return cannotSubmitDraft(); } } @@ -262,7 +259,6 @@ if (!control.isDraftVisible(cd.db(), cd)) { return createRuleError("Patch set " + patchSet.getId() + " not found"); } - initPatchSet(); if (patchSet.isDraft()) { return createRuleError("Cannot submit draft patch sets"); }