diff options
author | Chris Gavin <chris@chrisgavin.me> | 2016-01-06 15:53:22 +0000 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2016-01-21 17:07:57 +0100 |
commit | 82f47ace3d8f2141059cbe76ca51d4916a3e5d02 (patch) | |
tree | 6b1fd71d03c3fb2d7183f31a2d2efd9418b9b2ea /org.eclipse.jgit | |
parent | c221bd6c15887ad97e4c32bf213a6de69ecaaf53 (diff) | |
download | jgit-82f47ace3d8f2141059cbe76ca51d4916a3e5d02.tar.gz jgit-82f47ace3d8f2141059cbe76ca51d4916a3e5d02.zip |
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 <chris@chrisgavin.me>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/BundleFetchConnection.java | 27 |
1 files changed, 17 insertions, 10 deletions
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() { |