summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorChris Gavin <chris@chrisgavin.me>2016-01-06 15:53:22 +0000
committerMatthias Sohn <matthias.sohn@sap.com>2016-01-21 17:07:57 +0100
commit82f47ace3d8f2141059cbe76ca51d4916a3e5d02 (patch)
tree6b1fd71d03c3fb2d7183f31a2d2efd9418b9b2ea /org.eclipse.jgit
parentc221bd6c15887ad97e4c32bf213a6de69ecaaf53 (diff)
downloadjgit-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.java27
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() {