From: Chris Gavin Date: Wed, 6 Jan 2016 15:53:22 +0000 (+0000) Subject: Fix TransportException when reading bundle X-Git-Tag: v4.2.0.201601211800-r~2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=82f47ace3d8f2141059cbe76ca51d4916a3e5d02;p=jgit.git Fix TransportException when reading bundle When reading a bundle file, commit messages who's oneline format is longer than 982 characters caused JGit to treat subsequent text in the commit as a SHA, then throw a TransportException because it's not a valid SHA. Now the readLine method will read all the way to the end of the line, not just the first 1024 characters of it. Change-Id: If15b491aa9a1e4fd9b8bbed2dd9e6be47a64ccb7 Signed-off-by: Chris Gavin --- diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleFetchConnection.java index e53c04b535..8038fa4d31 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleFetchConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleFetchConnection.java @@ -161,16 +161,23 @@ class BundleFetchConnection extends BaseFetchConnection { } private String readLine(final byte[] hdrbuf) throws IOException { - bin.mark(hdrbuf.length); - final int cnt = bin.read(hdrbuf); - int lf = 0; - while (lf < cnt && hdrbuf[lf] != '\n') - lf++; - bin.reset(); - IO.skipFully(bin, lf); - if (lf < cnt && hdrbuf[lf] == '\n') - IO.skipFully(bin, 1); - return RawParseUtils.decode(Constants.CHARSET, hdrbuf, 0, lf); + StringBuilder line = new StringBuilder(); + boolean done = false; + while (!done) { + bin.mark(hdrbuf.length); + final int cnt = bin.read(hdrbuf); + int lf = 0; + while (lf < cnt && hdrbuf[lf] != '\n') + lf++; + bin.reset(); + IO.skipFully(bin, lf); + if (lf < cnt && hdrbuf[lf] == '\n') { + IO.skipFully(bin, 1); + done = true; + } + line.append(RawParseUtils.decode(Constants.CHARSET, hdrbuf, 0, lf)); + } + return line.toString(); } public boolean didFetchTestConnectivity() {