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 + } }