Merge "Update dependency versions to match Gerrit"
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", "&lt;p&rt;")),
+        l.linkify(REQ, "http://weird/htmlified/?url&lt;p&rt;"));
+  }
 }