Merge "Sanitise configuration values"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java b/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java
index d5d0f4c..96dd89e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java
@@ -52,20 +52,21 @@
   public CommitMessageLengthValidation(@GerritServerConfig Config gerritConfig)
       {
     this.config = gerritConfig;
-    this.maxSubjectLength = config.getInt(
-        COMMIT_MESSAGE_SECTION, null,
+    this.maxSubjectLength = nonNegativeInt(
         MAX_SUBJECT_LENGTH_KEY, DEFAULT_MAX_SUBJECT_LENGTH);
-    this.maxLineLength = config.getInt(
-        COMMIT_MESSAGE_SECTION, null,
+    this.maxLineLength = nonNegativeInt(
         MAX_LINE_LENGTH_KEY, DEFAULT_MAX_LINE_LENGTH);
     this.rejectTooLong = config.getBoolean(
-        COMMIT_MESSAGE_SECTION, REJECT_TOO_LONG_KEY,
-        DEFAULT_REJECT_TOO_LONG);
-    this.longLinesThreshold = config.getInt(
-        COMMIT_MESSAGE_SECTION, null,
+        COMMIT_MESSAGE_SECTION, REJECT_TOO_LONG_KEY, DEFAULT_REJECT_TOO_LONG);
+    this.longLinesThreshold = nonNegativeInt(
         LONG_LINES_THRESHOLD_KEY, DEFAULT_LONG_LINES_THRESHOLD);
   }
 
+  private int nonNegativeInt(String name, int defaultValue) {
+    int value = this.config.getInt(COMMIT_MESSAGE_SECTION, null, name, defaultValue);
+    return value >= 0 ? value : defaultValue;
+  }
+
   private void onLineTooLong(final AbbreviatedObjectId id,
       List<CommitValidationMessage> messagesList, final String errorMessage)
           throws CommitValidationException {
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 0bf0c9b..b33ce93 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -5,17 +5,17 @@
 configured in the standard Gerrit config file `gerrit.config`.
 
 commitmessage.maxSubjectLength
-:	Maximum length of the commit message's subject line.  If
-	not specified, defaults to 65.
+:	Maximum length of the commit message's subject line.  Defaults
+	to 65 if not specified or less than 0.
 
 commitmessage.maxLineLength
-:	Maximum length of a line in the commit message's body.  If
-	not specified, defaults to 70.
+:	Maximum length of a line in the commit message's body.  Defaults
+	to 70 if not specified or less than 0.
 
 commitmessage.longLinesThreshold
 :	Percentage of commit message lines allowed to exceed the
-	maximum length before a warning or error is generated.  If
-	not specified, defaults to 33.
+	maximum length before a warning or error is generated.  Defaults
+	to 33 if not specified or less than 0.
 
 commitmessage.rejectTooLong
 :	If set to `true`, reject commits whose subject or line