Fix NullPointerException in ChangeData.getLabelTypes()
Change-Id: I78e34585e3b93fbe18fc7ea54a36fcddac65c45a
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index 64ef091..863cffb 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -758,8 +758,8 @@
return change;
}
- public LabelTypes getLabelTypes() {
- return changeControl.getLabelTypes();
+ public LabelTypes getLabelTypes() throws OrmException {
+ return changeControl().getLabelTypes();
}
public ChangeNotes notes() throws OrmException {
diff --git a/gerrit-server/src/main/java/gerrit/PRED__check_user_label_3.java b/gerrit-server/src/main/java/gerrit/PRED__check_user_label_3.java
index b2b9890..e84b3ac 100644
--- a/gerrit-server/src/main/java/gerrit/PRED__check_user_label_3.java
+++ b/gerrit-server/src/main/java/gerrit/PRED__check_user_label_3.java
@@ -21,7 +21,9 @@
import com.google.gerrit.server.permissions.LabelPermission;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.query.change.ChangeData;
+import com.google.gwtorm.server.OrmException;
import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
import com.googlecode.prolog_cafe.exceptions.PrologException;
import com.googlecode.prolog_cafe.exceptions.SystemException;
@@ -80,19 +82,20 @@
}
short val = (short) ((IntegerTerm) a3).intValue();
- ChangeData cd = StoredValues.CHANGE_DATA.get(engine);
- LabelType type = cd.getLabelTypes().byLabel(label);
- if (type == null) {
- return engine.fail();
- }
-
try {
+ ChangeData cd = StoredValues.CHANGE_DATA.get(engine);
+ LabelType type = cd.getLabelTypes().byLabel(label);
+ if (type == null) {
+ return engine.fail();
+ }
StoredValues.PERMISSION_BACKEND
.get(engine)
.user(user)
.change(cd)
.check(new LabelPermission.WithValue(type, val));
return cont;
+ } catch (OrmException err) {
+ throw new JavaException(this, 1, err);
} catch (AuthException err) {
return engine.fail();
} catch (PermissionBackendException err) {
diff --git a/gerrit-server/src/main/java/gerrit/PRED__user_label_range_4.java b/gerrit-server/src/main/java/gerrit/PRED__user_label_range_4.java
index 5c61007..f7f39da 100644
--- a/gerrit-server/src/main/java/gerrit/PRED__user_label_range_4.java
+++ b/gerrit-server/src/main/java/gerrit/PRED__user_label_range_4.java
@@ -20,7 +20,9 @@
import com.google.gerrit.server.permissions.LabelPermission;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.query.change.ChangeData;
+import com.google.gwtorm.server.OrmException;
import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
import com.googlecode.prolog_cafe.exceptions.PrologException;
import com.googlecode.prolog_cafe.exceptions.SystemException;
@@ -74,15 +76,16 @@
}
CurrentUser user = (CurrentUser) ((JavaObjectTerm) a2).object();
- ChangeData cd = StoredValues.CHANGE_DATA.get(engine);
- LabelType type = cd.getLabelTypes().byLabel(label);
- if (type == null) {
- return engine.fail();
- }
-
Set<LabelPermission.WithValue> can;
try {
+ ChangeData cd = StoredValues.CHANGE_DATA.get(engine);
+ LabelType type = cd.getLabelTypes().byLabel(label);
+ if (type == null) {
+ return engine.fail();
+ }
can = StoredValues.PERMISSION_BACKEND.get(engine).user(user).change(cd).test(type);
+ } catch (OrmException err) {
+ throw new JavaException(this, 1, err);
} catch (PermissionBackendException err) {
SystemException se = new SystemException(err.getMessage());
se.initCause(err);
diff --git a/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java b/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java
index 33d63c4..9bfcc61 100644
--- a/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java
+++ b/gerrit-server/src/main/java/gerrit/PRED_get_legacy_label_types_1.java
@@ -17,6 +17,8 @@
import com.google.gerrit.common.data.LabelType;
import com.google.gerrit.common.data.LabelValue;
import com.google.gerrit.rules.StoredValues;
+import com.google.gwtorm.server.OrmException;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
import com.googlecode.prolog_cafe.exceptions.PrologException;
import com.googlecode.prolog_cafe.lang.IntegerTerm;
import com.googlecode.prolog_cafe.lang.ListTerm;
@@ -51,7 +53,12 @@
public Operation exec(Prolog engine) throws PrologException {
engine.setB0();
Term a1 = arg1.dereference();
- List<LabelType> list = StoredValues.CHANGE_DATA.get(engine).getLabelTypes().getLabelTypes();
+ List<LabelType> list;
+ try {
+ list = StoredValues.CHANGE_DATA.get(engine).getLabelTypes().getLabelTypes();
+ } catch (OrmException err) {
+ throw new JavaException(this, 1, err);
+ }
Term head = Prolog.Nil;
for (int idx = list.size() - 1; 0 <= idx; idx--) {
head = new ListTerm(export(list.get(idx)), head);
diff --git a/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java b/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java
index 3dfcaec..40596e8 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java
@@ -54,7 +54,7 @@
}
@Override
- protected void setUpEnvironment(PrologEnvironment env) {
+ protected void setUpEnvironment(PrologEnvironment env) throws Exception {
LabelTypes labelTypes = new LabelTypes(Arrays.asList(Util.codeReview(), Util.verified()));
ChangeData cd = EasyMock.createMock(ChangeData.class);
expect(cd.getLabelTypes()).andStubReturn(labelTypes);
@@ -63,12 +63,12 @@
}
@Test
- public void gerritCommon() {
+ public void gerritCommon() throws Exception {
runPrologBasedTests();
}
@Test
- public void reductionLimit() throws CompileException {
+ public void reductionLimit() throws Exception {
PrologEnvironment env = envFactory.create(machine);
setUpEnvironment(env);
diff --git a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java b/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
index 6f6d189..7b2b388 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
@@ -84,7 +84,7 @@
*
* @param env Prolog environment.
*/
- protected void setUpEnvironment(PrologEnvironment env) {}
+ protected void setUpEnvironment(PrologEnvironment env) throws Exception {}
private PrologMachineCopy newMachine() {
BufferingPrologControl ctl = new BufferingPrologControl();
@@ -115,7 +115,7 @@
return env.execute(Prolog.BUILTIN, "clause", head, new VariableTerm());
}
- public void runPrologBasedTests() {
+ public void runPrologBasedTests() throws Exception {
int errors = 0;
long start = TimeUtil.nowMs();