Fix linkification of URLs containing ampersands Change-Id: I79d2669af578ac3b1cc53b4e17e7bfd7f7f7f48a
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 735e6f5..a9673b4 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
@@ -33,7 +33,10 @@ static { // HTTP URL regex adapted from com.google.gwtexpui.safehtml.client.SafeHtml. - String part = "[a-zA-Z0-9$_.+!*',%;:@=?#/~<>-]"; + String part = "(?:" + + "[a-zA-Z0-9$_.+!*',%;:@=?#/~<>-]" + + "|&(?!lt;|gt;)" + + ")"; String httpUrl = "https?://" + part + "{2,}" + "(?:[(]" + part + "*" + "[)])*" +
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 a943b2f..84f5f4f 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
@@ -110,4 +110,16 @@ "url", "http://test-host-review/foo/#/q/I0123456789,n,z")), l.linkify(REQ, "http://my/url/I0123456789 is not change I0123456789")); } + + public void testLinkifyAmpersand() throws Exception { + Linkifier l = new Linkifier(TestGitilesUrls.URLS); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "http://my/url?a&b", "url", "http://my/url?a&b")), + l.linkify(REQ, "http://my/url?a&b")); + assertEquals(ImmutableList.of( + ImmutableMap.of("text", "http://weird/htmlified/?url", + "url", "http://weird/htmlified/?url"), + ImmutableMap.of("text", "<p&rt;")), + l.linkify(REQ, "http://weird/htmlified/?url<p&rt;")); + } }