Commit fb76d2fc authored by Jim Fulton's avatar Jim Fulton

Checked in Scott Robertson's thread-safety fixes.

parent f734e9e1
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
############################################################################## ##############################################################################
"""DTML Method objects.""" """DTML Method objects."""
__version__='$Revision: 1.27 $'[11:-2] __version__='$Revision: 1.28 $'[11:-2]
from Globals import HTML, HTMLFile, MessageDialog from Globals import HTML, HTMLFile, MessageDialog
from string import join,split,strip,rfind,atoi,lower from string import join,split,strip,rfind,atoi,lower
...@@ -96,7 +96,7 @@ from AccessControl.Role import RoleManager ...@@ -96,7 +96,7 @@ from AccessControl.Role import RoleManager
from webdav.common import rfc1123_date from webdav.common import rfc1123_date
from DateTime.DateTime import DateTime from DateTime.DateTime import DateTime
from urllib import quote from urllib import quote
import regex, Globals, sys, Acquisition import ts_regex, Globals, sys, Acquisition
class DTMLMethod(cDocument, HTML, Acquisition.Implicit, RoleManager, class DTMLMethod(cDocument, HTML, Acquisition.Implicit, RoleManager,
...@@ -335,34 +335,42 @@ class DTMLMethod(cDocument, HTML, Acquisition.Implicit, RoleManager, ...@@ -335,34 +335,42 @@ class DTMLMethod(cDocument, HTML, Acquisition.Implicit, RoleManager,
def decapitate(html, RESPONSE=None, def decapitate(html, RESPONSE=None,
header_re=regex.compile( header_re=ts_regex.compile(
'\(\(' '\(\('
'[^\n\0\- <>:]+:[^\n]*\n' '[^\n\0\- <>:]+:[^\n]*\n'
'\|' '\|'
'[ \t]+[^\0\- ][^\n]*\n' '[ \t]+[^\0\- ][^\n]*\n'
'\)+\)[ \t]*\n\([\0-\377]+\)' '\)+\)[ \t]*\n\([\0-\377]+\)'
), ),
space_re=regex.compile('\([ \t]+\)'), space_re=ts_regex.compile('\([ \t]+\)'),
name_re=regex.compile('\([^\0\- <>:]+\):\([^\n]*\)'), name_re=ts_regex.compile('\([^\0\- <>:]+\):\([^\n]*\)'),
): ):
if header_re.match(html) < 0:
ts_results = header_re.match_group(html, (1,3))
if not ts_results:
return html return html
headers, html = header_re.group(1,3) headers, html = ts_results[1]
headers=split(headers,'\n') headers=split(headers,'\n')
i=1 i=1
while i < len(headers): while i < len(headers):
if not headers[i]: if not headers[i]:
del headers[i] del headers[i]
elif space_re.match(headers[i]) >= 0: continue
ts_results = space_re.match_group(headers[i], (1,))
if ts_results:
headers[i-1]="%s %s" % (headers[i-1], headers[i-1]="%s %s" % (headers[i-1],
headers[i][len(space_re.group(1)):]) headers[i][len(ts_results[1]):])
del headers[i] del headers[i]
else: continue
i=i+1
i=i+1
for i in range(len(headers)): for i in range(len(headers)):
if name_re.match(headers[i]) >= 0: ts_results = name_re.match_group(headers[i], (1,2))
k, v = name_re.group(1,2) if ts_results:
k, v = ts_results[1]
v=strip(v) v=strip(v)
else: else:
raise ValueError, 'Invalid Header (%d): %s ' % (i,headers[i]) raise ValueError, 'Invalid Header (%d): %s ' % (i,headers[i])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment