# HG changeset patch # User Dmitry Neverov # Date 1494942384 -7200 # Node ID 2a8670c6afa9cbbdf5f3985ad29e43e381b34331 # Parent c0f3096cfff636e8e48240ea1321943caded0300 Prohibit newlines in repository url diff -r c0f3096cfff6 -r 2a8670c6afa9 mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepo.java --- 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; diff -r c0f3096cfff6 -r 2a8670c6afa9 mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgRepoTest.java --- 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 + } + } }