Warn on and skip invalid commentlink.*.match regex
If commentlink.<subsection>.match is missing, a warning is logged.
However, if it contains an invalid regex, an exception is raised. This
is inconsistent.
This CL: a warning is logged if the regex is invalid.
Change-Id: Ic8e3586da5d64001473dbfadaefbee59c8d5248d
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
index 1a49a41..8225278 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
@@ -29,9 +29,9 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
import javax.servlet.http.HttpServletRequest;
@@ -66,14 +66,12 @@
List<CommentLinkInfo> list = new ArrayList<>();
list.add(new CommentLinkInfo(HTTP_URL_PATTERN, "$0"));
- Set<String> subsections = config.getSubsections(COMMENTLINK);
List<String> patterns = new ArrayList<>();
-
patterns.add(HTTP_URL_PATTERN.pattern());
patterns.add(CHANGE_ID_PATTERN.pattern());
- for (String subsection : subsections) {
+ for (String subsection : config.getSubsections(COMMENTLINK)) {
String match = config.getString("commentlink", subsection, "match");
String link = config.getString("commentlink", subsection, "link");
String html = config.getString("commentlink", subsection, "html");
@@ -85,11 +83,17 @@
log.warn("invalid commentlink.%s.match", subsection);
continue;
}
+ Pattern pattern;
+ try {
+ pattern = Pattern.compile(match);
+ } catch(PatternSyntaxException ex) {
+ log.warn("invalid commentlink." + subsection + ".match", ex);
+ continue;
+ }
if (Strings.isNullOrEmpty(link)) {
log.warn("invalid commentlink.%s.link", subsection);
continue;
}
- Pattern pattern = Pattern.compile(match);
list.add(new CommentLinkInfo(pattern, link));
patterns.add(match);
}
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
index 9a04f9d..4cca863 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
@@ -152,4 +152,12 @@
ImmutableMap.of("text", "<p&rt;")),
l.linkify(REQ, "http://weird/htmlified/?url<p&rt;"));
}
+
+ @Test
+ public void invalidCommentlinkMatchRegex() throws Exception {
+ Config config = new Config();
+ config.setString("commentlink", "foo", "match", "bad-regex(");
+ new Linkifier(TestGitilesUrls.URLS, config);
+ // Must not throw an exception
+ }
}