[Zope-dev] Accept-Charset hearders causing 500 internal server error.[correct but not lenient]

Romain Slootmaekers romain@zzict.com
Mon, 10 Feb 2003 13:27:06 +0100


Romain Slootmaekers wrote:
Hi,
below the original post:

it is a bug in Products/Localizer/Accept.py

here's the code to fix it:

#--- code fix starting from line 102 ---


# Get the quality
             try:
                 if len(x) == 2:
                     quality = x[1]            # Get the quality
                     quality =quality.strip()
                     quality = quality[2:]     # Get the number (remove 
"q=")
                     quality = float(quality)  # Change it to float
                 else:
                     quality = 1.0
             except:
                 quality=1.0
#--- end of code fix ---

I added a strip() and a try/except for other things that can go wrong.

This way Nokia Wap surfers can access your site while Localizer is 
installed.

have fun,

Sloot.

BTW, exceptions that originate here are not caught in the error_log.
this is probably unintended as well.


----------------- original post -----------------------------
> Hi,
> 
> We have problems with the Accept-Charset headers that are sent to the 
> zope server by some mobile phones:
> fi:
> 'Accept-Charset':'ISO-8859-1, US-ASCII, UTF-8; Q=0.8'
> 
> These cause a 500 internal server error. (Error Value: invalid literal 
> for float(): =0.8 )
> 
> I checked with the HTTP1.1 RFC26160 section 14.2 and the header seems 
> valid, but in fact isn't:
> there is a space between the semi-colon and the Q char (which shouldn't 
> be there acoording to the spec).
> 
> So, in principle, this is not a zope server bug, but an inflexibility.
> 
> I think the server should be a bit more lenient.
> a simple .strip() in the right place should do.
> 
> Could you guys fix this?
> 
> TIA,
> 
> Sloot.
> 
> 
> 
> 
> BTW, for completeness, I included a quick test program is included below 
> (causes a 500 on my zope 2.6.0) :
> 
> 
> 
> #--------------------- program illustrating the behavior -----------
> import httplib, urllib
> 
> def sendHTTP():
>     """
> 
>     """
>     headers = {'Accept':
>                'application/vnd.wap.wmlc, 
> application/vnd.wap.wmlscriptc, application/vnd.wap.wbxml, 
> image/vnd.wap.wbmp, image/gif, application/*, text/html, 
> application/xhtml+xml, application/vnd.wap.wml+xml, text/css',
>                'Accept-Charset':'ISO-8859-1, US-ASCII, UTF-8; Q=0.8'}#, 
> ISO-10646-UCS-2; Q=0.6'
>     conn = httplib.HTTPConnection("127.0.0.1:8080")
>     conn.request("GET", "/mobile/wap/games/",headers=headers)
>     response = conn.getresponse()
>     print response.status, response.reason
>     data = response.read()
>     print data
> 
>     conn.close()
> 
> sendHTTP()
> 
> 
> 
> 
> _______________________________________________
> Zope-Dev maillist  -  Zope-Dev@zope.org
> http://lists.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce
> http://lists.zope.org/mailman/listinfo/zope )
> 
>