summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.lfs.server/src
diff options
context:
space:
mode:
authorMatthias Sohn <matthias.sohn@sap.com>2018-09-17 00:35:33 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2018-09-17 17:48:55 +0200
commitc18c768678094dba36e4d394de7a673d1a8764c4 (patch)
tree97bf8c83da267082dc6706f8aef4822bcf5cbeec /org.eclipse.jgit.lfs.server/src
parent5c134f4d42e12e9192f2beca8370c1b8bd58c08d (diff)
downloadjgit-c18c768678094dba36e4d394de7a673d1a8764c4.tar.gz
jgit-c18c768678094dba36e4d394de7a673d1a8764c4.zip
Fix error handling in FileLfsServlet
Check in #sendError method if the response was committed already. If yes we cannot set response status or send an error message, last resort is to close the outputstream. If the response wasn't yet committed first reset the response before using writer to send the error message to the client since mixing STREAM and WRITE mode (mixing asynchronous and blocking I/O) is illegal in servlet 3.1. see the following bugs in the gerrit and jetty issue trackers https://bugs.chromium.org/p/gerrit/issues/detail?id=9667 https://bugs.chromium.org/p/gerrit/issues/detail?id=9721 https://github.com/eclipse/jetty.project/issues/2911 Change-Id: Ie35563c2e0ac1c5e918185a746622589a880dc7f Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.jgit.lfs.server/src')
-rw-r--r--org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java5
1 files changed, 5 insertions, 0 deletions
diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java
index a8e3c11e27..15c4448da8 100644
--- a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java
+++ b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java
@@ -202,6 +202,11 @@ public class FileLfsServlet extends HttpServlet {
*/
protected static void sendError(HttpServletResponse rsp, int status, String message)
throws IOException {
+ if (rsp.isCommitted()) {
+ rsp.getOutputStream().close();
+ return;
+ }
+ rsp.reset();
rsp.setStatus(status);
PrintWriter writer = rsp.getWriter();
gson.toJson(new Error(message), writer);