diff mercurial/hgweb/request.py @ 36853:ed0456fde625

hgweb: handle CONTENT_LENGTH PEP 3333 says CONTENT_LENGTH may be set. I /think/ WSGI servers are allowed to invent this key even if the client didn't send it. We had code in wireprotoserver looking for this key. So let's just automagically convert this key to an HTTP request header when parsing the request. Differential Revision: https://phab.mercurial-scm.org/D2744
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 10 Mar 2018 10:45:12 -0800
parents f9078c6caeb6
children 16292bbda39c
line wrap: on
line diff
--- a/mercurial/hgweb/request.py	Thu Mar 08 16:38:01 2018 -0800
+++ b/mercurial/hgweb/request.py	Sat Mar 10 10:45:12 2018 -0800
@@ -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,