Two bugs in email 0.96 that you may want to fix sooner rather than later

I've reported these to Barry, and so real fixes are on the way eventually; however, they're both annoying enough that I thought I might drop them here too. AFAIK, these bugs are still present in email 1.0 as well. 1) MIME messages with spaces around = sign in parameters of Content-Type aren't handled I think this is a non-compliant message, but I get a bunch of bounces (mostly from Hotmail..big shock that *they'd* be noncompliant, huh?) that have Content-Type headers of the form: Content-Type: Multipart/mixed; boundary = "CPIMSSMTPC06p5f3tG" The spaces around the = are the problem. This fixes them, I think without doing any other harm. (Message.py in the email package): --- Message.py Mon Dec 3 18:13:50 2001 *************** *** 304,309 **** --- 304,311 ---- for p in paramre.split(value): try: name, val = p.split('=', 1) + name = name.strip() + val = val.strip() except ValueError: # Must have been a bare attribute name = p Without this, qfiles/shunt fills up full of these messages. 2) MIME messages with long header lines have those headers corrupted on regeneration of messages. I'm pretty sure Bob Puff noticed this, but I can't find the thread anymore. Anyway, you end up with Content-Type (typically) that's been weirdly formatted into things like Content-Type: multipart/report;; Content-Type: multipart/report;;boundary=foo instead of the proper Content-Type: multipart/report; boundary=foo because of some full-part/subpart variable name confusion in email's Generator.py: Printing long header lines that require split_header() in Generator.py can go wrong because of confusion between the original line and the sub-lines. Here's a unified diff. For the most part, it's replacing 'text' with 'line' in the right places. --- /export/home/dmick/pymod/Generator.py Mon Dec 3 17:59:58 2001 +++ Generator.py Mon Dec 3 18:57:02 2001 @@ -175,22 +175,22 @@ rtn.append(line) SEMINLTAB.join(rtn) else: - oldlen = len(text) + oldlen = len(line) # Try to break the line on semicolons, but if that doesn't # work, try to split on folding whitespace. - while len(text) > maxheaderlen: - i = text.rfind(';', 0, maxheaderlen) + while len(line) > maxheaderlen: + i = line.rfind(';', 0, maxheaderlen) if i < 0: break - rtn.append(text[:i]) - text = text[i+1:].lstrip() - if len(text) <> oldlen: + rtn.append(line[:i]) + line = line[i+1:].lstrip() + if len(line) <> oldlen: # Splitting on semis worked - rtn.append(text) + rtn.append(line) return SEMINLTAB.join(rtn) # Splitting on semis didn't help, so try to split on # whitespace. - parts = re.split(r'(\s+)', text) + parts = re.split(r'(\s+)', line) # Watch out though for "Header: longnonsplittableline" if parts[0].endswith(':') and len(parts) == 3: return text
participants (1)
-
Dan Mick