[Python-checkins] python/dist/src/Lib/email Message.py,1.33,1.34

bwarsaw at users.sourceforge.net bwarsaw at users.sourceforge.net
Tue Sep 2 22:08:15 EDT 2003


Update of /cvsroot/python/python/dist/src/Lib/email
In directory sc8-pr-cvs1:/tmp/cvs-serv17359

Modified Files:
	Message.py 
Log Message:
A fix for parsing parameters when there are semicolons inside the
quotes.  Fixes SF bug #794466, with the essential patch provided by
Stuart D. Gathman.  Specifically,

_parseparam(), _get_params_preserve(): Use the parsing function that
takes quotes into account, as given (essentially) in the bug report's
test program.

Backport candidate.


Index: Message.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/email/Message.py,v
retrieving revision 1.33
retrieving revision 1.34
diff -C2 -d -r1.33 -r1.34
*** Message.py	19 Aug 2003 03:53:02 -0000	1.33
--- Message.py	3 Sep 2003 04:08:13 -0000	1.34
***************
*** 59,62 ****
--- 59,79 ----
          return param
  
+ def _parseparam(s):
+     plist = []
+     while s[:1] == ';':
+         s = s[1:]
+         end = s.find(';')
+         while end > 0 and s.count('"', 0, end) % 2:
+             end = s.find(';', end + 1)
+         if end < 0:
+             end = len(s)
+         f = s[:end]
+         if '=' in f:
+             i = f.index('=')
+             f = f[:i].strip().lower() + '=' + f[i+1:].strip()
+         plist.append(f.strip())
+         s = s[end:]
+     return plist
+ 
  
  def _unquotevalue(value):
***************
*** 526,530 ****
              return failobj
          params = []
!         for p in paramre.split(value):
              try:
                  name, val = p.split('=', 1)
--- 543,547 ----
              return failobj
          params = []
!         for p in _parseparam(';' + value):
              try:
                  name, val = p.split('=', 1)





More information about the Python-checkins mailing list