Browse Source

Throw InvalidObjectIdException from ObjectId.fromString("tooshort")

ObjectId.fromString already throws InvalidObjectIdException for most
malformed object ids, but for this kind it previously threw
IllegalArgumentException.  Since InvalidObjectIdException is a child of
IllegalArgumentException, callers that catch IllegalArgumentException
will continue to work.

Change-Id: I24e1422d51607c86a1cb816a495703279e461f01
Signed-off-by: Jonathan Nieder <jrn@google.com>
stable-4.1
Jonathan Nieder 10 years ago
parent
commit
761f070866
  1. 17
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java
  2. 9
      org.eclipse.jgit/src/org/eclipse/jgit/errors/InvalidObjectIdException.java
  3. 8
      org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java

17
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java

@ -49,6 +49,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.jgit.errors.InvalidObjectIdException;
import org.junit.Test;
public class ObjectIdTest {
@ -124,6 +126,21 @@ public class ObjectIdTest {
assertEquals(x.toLowerCase(), oid.name());
}
@Test(expected = InvalidObjectIdException.class)
public void testFromString_short() {
ObjectId.fromString("cafe1234");
}
@Test(expected = InvalidObjectIdException.class)
public void testFromString_nonHex() {
ObjectId.fromString("0123456789abcdefghij0123456789abcdefghij");
}
@Test(expected = InvalidObjectIdException.class)
public void testFromString_shortNonHex() {
ObjectId.fromString("6789ghij");
}
@Test
public void testGetByte() {
byte[] raw = new byte[20];

9
org.eclipse.jgit/src/org/eclipse/jgit/errors/InvalidObjectIdException.java

@ -68,6 +68,15 @@ public class InvalidObjectIdException extends IllegalArgumentException {
super(msg(bytes, offset, length));
}
/**
* @param id the invalid id.
*
* @since 4.1
*/
public InvalidObjectIdException(String id) {
super(MessageFormat.format(JGitText.get().invalidId, id));
}
private static String msg(byte[] bytes, int offset, int length) {
try {
return MessageFormat.format(

8
org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java

@ -45,7 +45,6 @@
package org.eclipse.jgit.lib;
import org.eclipse.jgit.errors.InvalidObjectIdException;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.util.NB;
import org.eclipse.jgit.util.RawParseUtils;
@ -53,7 +52,6 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.text.MessageFormat;
/**
* A SHA-1 abstraction.
@ -230,9 +228,9 @@ public class ObjectId extends AnyObjectId implements Serializable {
* @return the converted object id.
*/
public static ObjectId fromString(final String str) {
if (str.length() != Constants.OBJECT_ID_STRING_LENGTH)
throw new IllegalArgumentException(
MessageFormat.format(JGitText.get().invalidId, str));
if (str.length() != Constants.OBJECT_ID_STRING_LENGTH) {
throw new InvalidObjectIdException(str);
}
return fromHexString(Constants.encodeASCII(str), 0);
}

Loading…
Cancel
Save