Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 1168

Show
Ignore:
Timestamp:
06/28/06 00:31:28
Author:
fumanchu
Message:

encode_TEXT only for HTTP/1.1 response headers, and verify folded response headers start with linear whitespace.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/_cprequest.py

    r1166 r1168  
    682682         
    683683        # Transform our header dict into a sorted list of tuples. 
    684         self.header_list = self.headers.sorted_list() 
     684        h = self.headers.sorted_list() 
    685685         
    686686        cookie = self.simple_cookie.output() 
     
    688688            for line in cookie.split("\n"): 
    689689                name, value = line.split(": ", 1) 
    690                 self.header_list.append((name, value)) 
    691          
    692         self.header_list = [(k, http.encode_TEXT(v)) for k, v in self.header_list] 
     690                h.append((name, value)) 
     691         
     692        self.header_list = [] 
     693        for k, v in h: 
     694            if self.version >= (1, 1): 
     695                v = http.encode_TEXT(v) 
     696            # If there are any folds, make sure they are indented. 
     697            v = v.replace("\n", "\n ") 
     698            self.header_list.append((k, v)) 
     699 
  • trunk/cherrypy/lib/http.py

    r1166 r1168  
    185185 
    186186def encode_TEXT(value): 
    187     """Encode RFC-2047 TEXT (e.g. u"\u8200" -> "=?utf-8?b?6IiA?=").""" 
     187    """Encode RFC-2047 TEXT (e.g. u"\u8200" -> "=?utf-8?b?6IiA?="). 
     188     
     189    Note that HTTP/1.0 says, "Words of *TEXT may contain octets from 
     190        character sets other than US-ASCII." and "Recipients of header 
     191        field TEXT containing octets outside the US-ASCII character 
     192        set may assume that they represent ISO-8859-1 characters." 
     193        So don't use this function for encoding HTTP/1.0 values. 
     194    """ 
     195     
    188196    try: 
    189197        value = value.encode("iso-8859-1") 
  • trunk/cherrypy/test/test_core.py

    r1166 r1168  
    752752        self.getPage("/headers/ifmatch", 
    753753                     [('If-Match', '=?utf-8?q?=E2=84=ABngstr=C3=B6m?=')]) 
     754        self.assertBody("u'\\u212bngstr\\xf6m'") 
    754755        self.assertHeader("ETag", '=?utf-8?b?4oSrbmdzdHLDtm0=?=') 
    755         self.assertBody("u'\\u212bngstr\\xf6m'") 
     756         
     757        # Test a *LONG* RFC-2047-encoded request and response header value 
     758        c = "=E2=84=ABngstr=C3=B6m" 
     759        self.getPage("/headers/ifmatch", 
     760                     [('If-Match', '=?utf-8?q?%s?=' % (c * 10))]) 
     761        self.assertBody("u'%s'" % ('\\u212bngstr\\xf6m' * 10)) 
     762        self.assertHeader("ETag", 
     763                          '=?utf-8?b?4oSrbmdzdHLDtm3ihKtuZ3N0csO2beKEq25nc3Ryw7Zt4oSrbmdzdHLDtm0=?=' 
     764                          '=?utf-8?b?4oSrbmdzdHLDtm3ihKtuZ3N0csO2beKEq25nc3Ryw7Zt4oSrbmdzdHLDtm0=?=' 
     765                          '=?utf-8?b?4oSrbmdzdHLDtm3ihKtuZ3N0csO2bQ==?=') 
    756766     
    757767    def testHTTPMethods(self): 

Hosted by WebFaction

Log in as guest/cpguest to create tickets