From 2a523594542a544a187de006c315ead2c7e7e908 Mon Sep 17 00:00:00 2001 From: "Chris West (Faux)" Date: Thu, 9 Sep 2010 01:15:27 +0100 Subject: [PATCH] Allow ../relative paths in remotes git allows remotes to be relative paths, but the regex validating urls wouldn't accept anything starting with "..". Other functionality works fine with these paths. Bug: 311300 Change-Id: Ib74de0450a1c602b22884e19d994ce2f52634c77 --- .../tst/org/eclipse/jgit/transport/URIishTest.java | 10 ++++++++++ .../src/org/eclipse/jgit/transport/URIish.java | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java index ff8c9a6c1e..6aef874e20 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java @@ -83,6 +83,16 @@ public class URIishTest extends TestCase { assertEquals(u, new URIish(str)); } + public void testRelativePath() throws Exception { + final String str = "../../foo/bar"; + URIish u = new URIish(str); + assertNull(u.getScheme()); + assertFalse(u.isRemote()); + assertEquals(str, u.getPath()); + assertEquals(str, u.toString()); + assertEquals(u, new URIish(str)); + } + public void testUNC() throws Exception { final String str = "\\\\some\\place"; URIish u = new URIish(str); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java index 3f533281b4..44160c0d1d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java @@ -64,7 +64,12 @@ public class URIish implements Serializable { private static final long serialVersionUID = 1L; private static final Pattern FULL_URI = Pattern - .compile("^(?:([a-z][a-z0-9+-]+)://(?:([^/]+?)(?::([^/]+?))?@)?(?:([^/]+?))?(?::(\\d+))?)?((?:[A-Za-z]:)?/.+)$"); + .compile("^(?:([a-z][a-z0-9+-]+)://" // optional http:// + + "(?:([^/]+?)(?::([^/]+?))?@)?" // optional user:password@ + + "(?:([^/]+?))?(?::(\\d+))?)?" // optional example.com:1337 + + "((?:[A-Za-z]:)?" // optional drive-letter: + + "(?:\\.\\.)?" // optionally a relative path + +"/.+)$"); // /anything private static final Pattern SCP_URI = Pattern .compile("^(?:([^@]+?)@)?([^:]+?):(.+)$"); -- 2.39.5