Patchwork [06,of,11] hgweb: ensure Content-Length and Content-Type are not promoted to HTTP_ on py3

login
register
mail settings
Submitter Matt Harbison
Date Jan. 28, 2019, 5:20 a.m.
Message ID <1d6f4c32abc28ea54e3d.1548652852@Envy>
Download mbox | patch
Permalink /patch/38132/
State Accepted
Headers show

Comments

Matt Harbison - Jan. 28, 2019, 5:20 a.m.
# HG changeset patch
# User Matt Harbison <matt_harbison@yahoo.com>
# Date 1548630317 18000
#      Sun Jan 27 18:05:17 2019 -0500
# Node ID 1d6f4c32abc28ea54e3d1d8487a1d773033aedf0
# Parent  67b051e66fdb70a92eba77c2110789ef976bde60
hgweb: ensure Content-Length and Content-Type are not promoted to HTTP_ on py3

In stabilizing test-lfs-serve-access.t for py3, the server started asserting on
blob upload:

    Environment should not have the key: HTTP_CONTENT_LENGTH (use CONTENT_LENGTH instead)

It could be avoided by explicitly setting the Content-Length header on the
client side.  I didn't go back to py2, but printing the original header here in
py37 revealed 'Content-length' when sent to the error log.

Patch

diff --git a/mercurial/hgweb/server.py b/mercurial/hgweb/server.py
--- a/mercurial/hgweb/server.py
+++ b/mercurial/hgweb/server.py
@@ -165,7 +165,7 @@  class _httprequesthandler(httpservermod.
         if length:
             env[r'CONTENT_LENGTH'] = length
         for header in [h for h in self.headers.keys()
-                       if h not in (r'content-type', r'content-length')]:
+                      if h.lower() not in (r'content-type', r'content-length')]:
             hkey = r'HTTP_' + header.replace(r'-', r'_').upper()
             hval = self.headers.get(header)
             hval = hval.replace(r'\n', r'').strip()