[Zope-Checkins] SVN: Zope/trunk/ Remove the lock around the cookie parsing code.
Martijn Pieters
mj at zopatista.com
Thu Oct 13 09:15:42 EST 2011
Log message for revision 123088:
Remove the lock around the cookie parsing code.
The locking here was only ever needed for the old `regex` module that was
originally used for this code, but that was replaced by the thread-safe `re`
some 10 years ago (see r20110, april 2001).
Changed:
U Zope/trunk/doc/CHANGES.rst
U Zope/trunk/src/ZPublisher/HTTPRequest.py
-=-
Modified: Zope/trunk/doc/CHANGES.rst
===================================================================
--- Zope/trunk/doc/CHANGES.rst 2011-10-13 13:18:32 UTC (rev 123087)
+++ Zope/trunk/doc/CHANGES.rst 2011-10-13 14:15:41 UTC (rev 123088)
@@ -50,6 +50,10 @@
Restructuring
+++++++++++++
+- Removed the (very obsolete) thread lock around the cookie parsing code
+ in HTTPRequest.py; the python `re` module is thread-safe, unlike the
+ ancient `regex` module that was once used here.
+
- Removed the special handling of `Set-Cookie` headers in
`HTTPResponse.setHeader`. Use the `setCookie`/`appendCookie`/`expireCookie`
methods instead, or if low-level control is needed, use `addHeader` instead
Modified: Zope/trunk/src/ZPublisher/HTTPRequest.py
===================================================================
--- Zope/trunk/src/ZPublisher/HTTPRequest.py 2011-10-13 13:18:32 UTC (rev 123087)
+++ Zope/trunk/src/ZPublisher/HTTPRequest.py 2011-10-13 14:15:41 UTC (rev 123088)
@@ -40,7 +40,6 @@
from ZPublisher.BaseRequest import BaseRequest
from ZPublisher.BaseRequest import quote
from ZPublisher.Converters import get_converter
-from ZPublisher.maybe_lock import allocate_lock
# Flags
SEQUENCE = 1
@@ -1649,7 +1648,6 @@
return self
-parse_cookie_lock = allocate_lock()
QPARMRE= re.compile(
'([\x00- ]*([^\x00- ;,="]+)="([^"]*)"([\x00- ]*[;,])?[\x00- ]*)')
PARMRE = re.compile(
@@ -1661,43 +1659,36 @@
qparmre=QPARMRE,
parmre=PARMRE,
paramlessre=PARAMLESSRE,
- acquire=parse_cookie_lock.acquire,
- release=parse_cookie_lock.release,
):
if result is None:
result = {}
- acquire()
- try:
+ mo_q = qparmre.match(text)
- mo_q = qparmre.match(text)
+ if mo_q:
+ # Match quoted correct cookies
+ l = len(mo_q.group(1))
+ name = mo_q.group(2)
+ value = mo_q.group(3)
- if mo_q:
- # Match quoted correct cookies
- l = len(mo_q.group(1))
- name = mo_q.group(2)
- value = mo_q.group(3)
+ else:
+ # Match evil MSIE cookies ;)
+ mo_p = parmre.match(text)
+ if mo_p:
+ l = len(mo_p.group(1))
+ name = mo_p.group(2)
+ value = mo_p.group(3)
else:
- # Match evil MSIE cookies ;)
- mo_p = parmre.match(text)
-
- if mo_p:
- l = len(mo_p.group(1))
- name = mo_p.group(2)
- value = mo_p.group(3)
+ # Broken Cookie without = nor value.
+ broken_p = paramlessre.match(text)
+ if broken_p:
+ l = len(broken_p.group(1))
+ name = broken_p.group(2)
+ value = ''
else:
- # Broken Cookie without = nor value.
- broken_p = paramlessre.match(text)
- if broken_p:
- l = len(broken_p.group(1))
- name = broken_p.group(2)
- value = ''
- else:
- return result
- finally:
- release()
+ return result
if name not in result:
result[name] = unquote(value)
More information about the Zope-Checkins
mailing list