Merge "Completing set of validation for Upload Validator" into stable-3.3
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
index 04525ec..eaa147e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
@@ -33,8 +33,13 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ChangeEmailValidator implements CommitValidationListener {
+  private static final Logger log = LoggerFactory.getLogger(ValidatorConfig.class);
+
   public static AbstractModule module() {
     return new AbstractModule() {
       @Override
@@ -144,8 +149,14 @@
   }
 
   @VisibleForTesting
-  static boolean performValidation(String email, String[] allowedEmailPatterns) {
-    return Arrays.stream(allowedEmailPatterns)
-        .anyMatch(s -> Pattern.matches(s, Strings.nullToEmpty(email)));
+  static boolean performValidation(String email, String[] allowedEmailPatterns)
+      throws CommitValidationException {
+    try {
+      return Arrays.stream(allowedEmailPatterns)
+          .anyMatch(s -> Pattern.matches(s, Strings.nullToEmpty(email)));
+    } catch (PatternSyntaxException e) {
+      log.error("Invalid regex '{}' in plugin (uploadvalidator) config", e.getPattern());
+      throw new CommitValidationException("Invalid regex in email pattern configuration.", e);
+    }
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/PluginConfigValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/PluginConfigValidator.java
index d612229..61a47b7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/PluginConfigValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/PluginConfigValidator.java
@@ -159,14 +159,13 @@
   public ImmutableList<CommitValidationMessage> validateRegex(
       String fileName, Config cfg, String validatorKey) {
 
-    ImmutableList.Builder<CommitValidationMessage> validationMessages = ImmutableList.builder();
     String pattern = cfg.getString("plugin", pluginName, validatorKey);
 
     if (pattern != null) {
       try {
         Pattern.compile(pattern);
       } catch (PatternSyntaxException e) {
-        validationMessages.add(
+          return ImmutableList.of(
             new CommitValidationMessage(
                 String.format(
                     "The value '%s' configured in %s (parameter %s.%s) is invalid.",
@@ -174,7 +173,7 @@
                 ValidationMessage.Type.ERROR));
       }
     }
-    return validationMessages.build();
+    return ImmutableList.of();
   }
 
   /**
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java
index 0b208f2..cd28f73 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java
@@ -15,8 +15,10 @@
 package com.googlesource.gerrit.plugins.uploadvalidator;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 import static com.googlesource.gerrit.plugins.uploadvalidator.TestUtils.EMPTY_PLUGIN_CONFIG;
 
+import com.google.gerrit.server.git.validators.CommitValidationException;
 import org.junit.Test;
 
 public class ChangeEmailTest {
@@ -28,6 +30,8 @@
     "tester@gerrit\\..*"
   };
 
+  private static final String[] illegalRegexEmailPatterns = {"*"};
+
   @Test
   public void testEmailValid() throws Exception {
     assertThat(
@@ -67,6 +71,15 @@
   }
 
   @Test
+  public void testEmailIllegalConfig() throws Exception {
+    assertThrows(
+        CommitValidationException.class,
+        () ->
+            ChangeEmailValidator.performValidation(
+                "emailtester@gerritnet.com", illegalRegexEmailPatterns));
+  }
+
+  @Test
   public void validatorBehaviorWhenAuthorConfigEmpty() {
     assertThat(ChangeEmailValidator.isAuthorActive(EMPTY_PLUGIN_CONFIG)).isFalse();
     assertThat(ChangeEmailValidator.getAllowedAuthorEmailPatterns(EMPTY_PLUGIN_CONFIG)).isEmpty();