Fix IndexOutOfBoundsException when parsing PersonIdent
IndexOutOfBoundsException could occur when parsing PersonIdent for which no name is present, as part of a RevCommit (nameB > 0).
This commit is contained in:
parent
0ab7be9681
commit
929862f322
|
@ -161,6 +161,21 @@ public void testParse_WeirdHeaderOnlyCommit() throws Exception {
|
||||||
assertEquals("", c.getShortMessage());
|
assertEquals("", c.getShortMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParse_incompleteAuthorAndCommitter() throws Exception {
|
||||||
|
final StringBuilder b = new StringBuilder();
|
||||||
|
b.append("tree 9788669ad918b6fcce64af8882fc9a81cb6aba67\n");
|
||||||
|
b.append("author <a_u_thor@example.com> 1218123387 +0700\n");
|
||||||
|
b.append("committer <> 1218123390 -0500\n");
|
||||||
|
|
||||||
|
final RevCommit c;
|
||||||
|
c = new RevCommit(id("9473095c4cb2f12aefe1db8a355fe3fafba42f67"));
|
||||||
|
c.parseCanonical(new RevWalk(db), b.toString().getBytes("UTF-8"));
|
||||||
|
|
||||||
|
assertEquals(new PersonIdent("", "a_u_thor@example.com", 1218123387000l, 7), c.getAuthorIdent());
|
||||||
|
assertEquals(new PersonIdent("", "", 1218123390000l, -5), c.getCommitterIdent());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testParse_implicit_UTF8_encoded() throws Exception {
|
public void testParse_implicit_UTF8_encoded() throws Exception {
|
||||||
final ByteArrayOutputStream b = new ByteArrayOutputStream();
|
final ByteArrayOutputStream b = new ByteArrayOutputStream();
|
||||||
|
|
|
@ -717,8 +717,8 @@ public static PersonIdent parsePersonIdent(final byte[] raw, final int nameB) {
|
||||||
(emailE >= raw.length - 1 && raw[emailE - 1] != '>'))
|
(emailE >= raw.length - 1 && raw[emailE - 1] != '>'))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
final int nameEnd = emailB - 2 >= 0 && raw[emailB - 2] == ' ' ? emailB - 2
|
final int nameEnd = emailB - 2 >= nameB && raw[emailB - 2] == ' ' ?
|
||||||
: emailB - 1;
|
emailB - 2 : emailB - 1;
|
||||||
final String name = decode(cs, raw, nameB, nameEnd);
|
final String name = decode(cs, raw, nameB, nameEnd);
|
||||||
final String email = decode(cs, raw, emailB, emailE - 1);
|
final String email = decode(cs, raw, emailB, emailE - 1);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue