D2744: hgweb: handle CONTENT_LENGTH
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sat Mar 10 15:03:26 EST 2018
indygreg updated this revision to Diff 6824.
indygreg edited the summary of this revision.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2744?vs=6750&id=6824
REVISION DETAIL
https://phab.mercurial-scm.org/D2744
AFFECTED FILES
mercurial/hgweb/request.py
mercurial/wireprotoserver.py
CHANGE DETAILS
diff --git a/mercurial/wireprotoserver.py b/mercurial/wireprotoserver.py
--- a/mercurial/wireprotoserver.py
+++ b/mercurial/wireprotoserver.py
@@ -91,10 +91,9 @@
return args
def forwardpayload(self, fp):
- if b'Content-Length' in self._req.headers:
- length = int(self._req.headers[b'Content-Length'])
- else:
- length = int(self._wsgireq.env[r'CONTENT_LENGTH'])
+ # Existing clients *always* send Content-Length.
+ length = int(self._req.headers[b'Content-Length'])
+
# If httppostargs is used, we need to read Content-Length
# minus the amount that was consumed by args.
length -= int(self._req.headers.get(b'X-HgArgs-Post', 0))
diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py
+++ b/mercurial/hgweb/request.py
@@ -200,6 +200,13 @@
headers = wsgiheaders.Headers(headers)
+ # This is kind of a lie because the HTTP header wasn't explicitly
+ # sent. But for all intents and purposes it should be OK to lie about
+ # this, since a consumer will either either value to determine how many
+ # bytes are available to read.
+ if 'CONTENT_LENGTH' in env and 'HTTP_CONTENT_LENGTH' not in env:
+ headers['Content-Length'] = env['CONTENT_LENGTH']
+
return parsedrequest(url=fullurl, baseurl=baseurl,
advertisedurl=advertisedfullurl,
advertisedbaseurl=advertisedbaseurl,
To: indygreg, #hg-reviewers, durin42
Cc: durin42, mercurial-devel
More information about the Mercurial-devel
mailing list