changeset 968:2a8670c6afa9 Indore-2017.1.x

Prohibit newlines in repository url
author Dmitry Neverov <dmitry.neverov@gmail.com>
date Tue, 16 May 2017 15:46:24 +0200
parents c0f3096cfff6
children 0385d076bdf4 c5dc2c802e4b
files mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepo.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepoTest.java
diffstat 2 files changed, 32 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepo.java	Tue May 16 11:28:27 2017 +0200
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepo.java	Tue May 16 15:46:24 2017 +0200
@@ -242,6 +242,8 @@
   }
 
   public void setDefaultPath(@NotNull String defaultPath) throws VcsException {
+    if (defaultPath.contains("\n") || defaultPath.contains("\r"))
+      throw new VcsException("Newline in repository url '" + defaultPath + "'");
     try {
       File hgrc = new File(new File(myWorkingDir, ".hg"), "hgrc");
       String content = "%include " + Constants.TEAMCITY_HG_CONFIG_FILE_NAME + "\n\n[paths]\ndefault = " + defaultPath;
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepoTest.java	Tue May 16 11:28:27 2017 +0200
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepoTest.java	Tue May 16 15:46:24 2017 +0200
@@ -16,19 +16,19 @@
 
 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
 
-import com.intellij.openapi.diagnostic.Logger;
-import jetbrains.buildServer.TempFiles;
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.AuthSettings;
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.TestCommandSettingsFactory;
+import jetbrains.buildServer.util.TestFor;
+import jetbrains.buildServer.vcs.VcsException;
+import org.jetbrains.annotations.NotNull;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 import java.io.File;
 import java.util.List;
 
 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;
-import static org.testng.AssertJUnit.assertEquals;
-import static org.testng.AssertJUnit.assertNull;
-import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.AssertJUnit.*;
 
 @Test
 public class HgRepoTest extends BaseMercurialTestCase {
@@ -58,4 +58,29 @@
     assertEquals(1, changes.size());
   }
 
+
+  @DataProvider(name = "urlsWithNewLines")
+  public static Object[][] urlsWithNewLines() {
+    return new Object[][] {
+            new Object[] { "http://some.org/repo\n" },
+            new Object[] { "http://some.org/repo\r" },
+            new Object[] { "http://some.org/repo\n[section]" },
+            new Object[] { "http://some.org/repo\r[section]" },
+            new Object[] { "http://some.org/repo\r\n[section]" },
+    };
+  }
+
+  @TestFor(issues = "TW-50043")//TW-50043 is about git, but hg suffers from the same problem
+  @Test(dataProvider = "urlsWithNewLines")
+  public void newline_in_url(@NotNull String url) throws Exception {
+    File repository = myTempFiles.createTempDir();
+    HgRepo repo = new HgRepo(new TestCommandSettingsFactory(), repository, Util.getHgPath(), new AuthSettings());
+    repo.init().call();
+    try {
+      repo.setDefaultPath(url);
+      fail("no error for url '" + url + "'");
+    } catch (VcsException e) {
+      //expected
+    }
+  }
 }