aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKetan Padegaonkar2011-05-19 03:38:26 (EDT)
committerChris Aniszczyk2011-05-19 09:58:17 (EDT)
commitf953a35e9a1f279ca038955243c07fd84fb6ae23 (patch)
tree2de64ceafa32ceba88548f59d41dee8fca82094b
parentdc30c95d971ca270f442403ada0d4e3b00151419 (diff)
downloadjgit-f953a35e9a1f279ca038955243c07fd84fb6ae23.zip
jgit-f953a35e9a1f279ca038955243c07fd84fb6ae23.tar.gz
jgit-f953a35e9a1f279ca038955243c07fd84fb6ae23.tar.bz2
Fix NPE in URIish when parsing an empty URIrefs/changes/66/3466/2
Change-Id: Id1c42dc9843f62c581b9904b02150de53cf7777c Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java20
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java5
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java11
3 files changed, 36 insertions, 0 deletions
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 01d3820..9b4ebf9 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
@@ -63,6 +63,26 @@ public class URIishTest {
private static final String GIT_SCHEME = "git://";
@Test
+ public void shouldRaiseErrorOnEmptyURI() throws Exception {
+ try {
+ new URIish("");
+ fail("expecting an exception");
+ } catch (URISyntaxException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void shouldRaiseErrorOnNullURI() throws Exception {
+ try {
+ new URIish((String) null);
+ fail("expecting an exception");
+ } catch (URISyntaxException e) {
+ // expected
+ }
+ }
+
+ @Test
public void testUnixFile() throws Exception {
final String str = "/home/m y";
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 1c93979..8fe7b2a 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java
@@ -55,6 +55,7 @@ import java.util.regex.Pattern;
import org.eclipse.jgit.JGitText;
import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.util.StringUtils;
/**
* This URI like construct used for referencing Git archives over the net, as
@@ -193,6 +194,10 @@ public class URIish implements Serializable {
* @throws URISyntaxException
*/
public URIish(String s) throws URISyntaxException {
+ if (StringUtils.isEmptyOrNull(s)) {
+ throw new URISyntaxException("The uri was empty or null",
+ JGitText.get().cannotParseGitURIish);
+ }
Matcher matcher = SINGLE_SLASH_FILE_URI.matcher(s);
if (matcher.matches()) {
scheme = matcher.group(1);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
index 59f3d83..5e43b26 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
@@ -222,4 +222,15 @@ public final class StringUtils {
private StringUtils() {
// Do not create instances
}
+
+ /**
+ * Test if a string is empty or null.
+ *
+ * @param stringValue
+ * the string to check
+ * @return <code>true</code> if the string is <code>null</code> or empty
+ */
+ public static boolean isEmptyOrNull(String stringValue) {
+ return stringValue == null || stringValue.length() == 0;
+ }
}