]> source.dussan.org Git - jgit.git/commit
Discard request HTTP bodies for status code <400 16/4716/1
authorShawn O. Pearce <spearce@spearce.org>
Thu, 1 Dec 2011 01:36:32 +0000 (17:36 -0800)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 2 Dec 2011 00:01:13 +0000 (16:01 -0800)
commitdb00632db77be8109b7aba2ffc229c354e4ee5a2
treea8843eae5a96ef4be578ca66189030e40a005d18
parentac6cda955c6859d57ba1a705ac1c2786a16b8b14
Discard request HTTP bodies for status code <400

The HTTP RFCs require a server to fully consume the request body before
it can return a non-error status code, which is any code below 400.

JGit returns most Git level errors inside of an HTTP 200 OK response,
and sometimes this happens before the entire request was consumed from
the servlet container. In such cases the body must be skipped or read
until EOF is reached, ensuring the HTTP keep-alive semantics will work
for the next request on the same TCP connection.

HTTP status codes >= 400 may be returned without consuming the body,
and a servlet container must set "Connection: close" in the response
headers when this happens, since the state of the request body is not
well defined with an early abort.

With the introduction of sendError() in GitSmartHttpTools there are
only a handful of locations that need to worry about the request body
being consumed, so sprinkle the call in as necessary.

Change-Id: I5381e110585f780c01a764df8e27c80aacf5146e
org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java
org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java
org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java
org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java