changeset 320:568ce42b1e9d Eluru-6.5.x

TW-18262 escape ampersand in the password
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Thu, 15 Sep 2011 12:25:37 +0400
parents 916c0967d63d
children 6667765025c6 ef091b782acc
files mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SettingsTest.java
diffstat 2 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java	Thu Sep 15 11:40:23 2011 +0400
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java	Thu Sep 15 12:25:37 2011 +0400
@@ -177,7 +177,9 @@
       String escapedURI = uri.toASCIIString();
       int from = "http://".length();
       int to = escapedURI.indexOf("somewhere.com") - 1;
-      return escapedURI.substring(from, to);
+      String escapedUserInfo = escapedURI.substring(from, to);
+      escapedUserInfo = escapedUserInfo.replaceAll("&", "%26");
+      return escapedUserInfo;
     } catch (URISyntaxException e) {
       assert false;
     }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SettingsTest.java	Thu Sep 15 11:40:23 2011 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SettingsTest.java	Thu Sep 15 12:25:37 2011 +0400
@@ -107,6 +107,13 @@
     assertTrue(settings.isUncompressedTransfer());
   }
 
+  //TW-18262
+  public void ampersand_in_password() {
+    VcsRootImpl vcsRoot = createVcsRoot("http://some.org/path", "user", "m&n");
+    Settings settings = new Settings(vcsRoot);
+		assertEquals("http://user:m%26n@some.org/path", settings.getRepositoryUrl());
+  }
+
   private VcsRootImpl createVcsRoot(String url) {
     return createVcsRoot(url, "user", "pwd");
   }