RefUpdate: Protect against null ObjectId in ReceiveCommand

RefUpdate's onRefOperation method is invoked by RefOperationValidators
for every registered RefOperationValidationListener.

If one of those listeners passes a RefReceivedEvent that contains an
instance of ReceiveCommand that was initialized with null old or
new ObjectId, this results in a NullPointerException when the ObjectId
is dereferenced to get the name.

Protect against such misbehaving validators by translating any null
instance to ObjectId.zeroId().

Change-Id: Ib9399c2351af20b23f8c4481c7b067f3a4dcb688
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java
index 6189277..d9b38e4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.hooks;
 
 import com.google.common.collect.ImmutableList;
+import com.google.gerrit.common.Nullable;
 import com.google.gerrit.server.events.RefReceivedEvent;
 import com.google.gerrit.server.git.validators.RefOperationValidationListener;
 import com.google.gerrit.server.git.validators.ValidationMessage;
@@ -22,6 +23,7 @@
 import com.google.inject.Inject;
 import java.util.Collections;
 import java.util.List;
+import org.eclipse.jgit.lib.ObjectId;
 
 public class RefUpdate implements RefOperationValidationListener {
   private final SynchronousHook hook;
@@ -33,6 +35,10 @@
     this.hookFactory = hookFactory;
   }
 
+  private ObjectId getObjectId(@Nullable ObjectId object) {
+    return object == null ? ObjectId.zeroId() : object;
+  }
+
   @Override
   public List<ValidationMessage> onRefOperation(RefReceivedEvent refEvent)
       throws ValidationException {
@@ -41,8 +47,8 @@
     HookArgs args = hookFactory.createArgs();
     args.add("--project", projectName);
     args.add("--uploader", refEvent.user.getNameEmail());
-    args.add("--oldrev", refEvent.command.getOldId().getName());
-    args.add("--newrev", refEvent.command.getNewId().getName());
+    args.add("--oldrev", getObjectId(refEvent.command.getOldId()).getName());
+    args.add("--newrev", getObjectId(refEvent.command.getNewId()).getName());
     args.add("--refname", refEvent.command.getRefName());
 
     HookResult result = hook.run(projectName, args);