[issue32182] Infinite recursion in email.message.as_string()

2017-11-30 Thread Silla Rizzoli

New submission from Silla Rizzoli :

Sometimes RFC-correct email headers do not get folded correctly; the example 
code below results in an infinite recursion exception.

import sys
import mailbox
from email.message import EmailMessage
from email.headerregistry import Address
from email import policy

ePol = policy.SMTP.clone(refold_source='long',max_line_length=78)
msg = EmailMessage(ePol)
msg['From'] = Address("abcdefgh ijklnopq","a.ijklnopq","antani.com")
msg['To'] = 
(Address("abcdef.ghijkl...@pqrstuvwxyz12345678.it","abcdef.ghijklmnop","pqrstuvwxyz12345678.it"),
 Address("Jane Doe", "jane", "doe.com"))
msg['Subject'] = "Test"
msg.set_content("Body")
finalMail = msg.as_string()

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python3.6/email/message.py", line 968, in as_string
return super().as_string(maxheaderlen=maxheaderlen, policy=policy)
  File "/usr/lib/python3.6/email/message.py", line 158, in as_string
g.flatten(self, unixfrom=unixfrom)
  File "/usr/lib/python3.6/email/generator.py", line 116, in flatten
self._write(msg)
  File "/usr/lib/python3.6/email/generator.py", line 195, in _write
self._write_headers(msg)
  File "/usr/lib/python3.6/email/generator.py", line 222, in _write_headers
self.write(self.policy.fold(h, v))
  File "/usr/lib/python3.6/email/policy.py", line 183, in fold
return self._fold(name, value, refold_binary=True)
  File "/usr/lib/python3.6/email/policy.py", line 205, in _fold
return value.fold(policy=self)
  File "/usr/lib/python3.6/email/headerregistry.py", line 255, in fold
return header.fold(policy=policy)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 300, in fold
self._fold(folded)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 1226, in _fold
rest._fold(folded)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 149, in 
append_if_fits
token._fold(self)
  File "/usr/lib/python3.6/email/_header_value_parser.py", line 338, in _fold
if folded.append_if_fits(part, tstr):
  File "/usr/lib/pyth

[issue32182] Infinite recursion in email.message.as_string()

2017-12-01 Thread Silla Rizzoli

Silla Rizzoli  added the comment:

Ok, thanks!
I'm writing a program to convert Outlook for Mac backup files (.olm) into
plain mbox files as a way to teach myself Python (and at the same time
regain control of my email), so I have tens of thousand of emails to test
your new code on, if you feel you need some fedback before releasing it.

Best regards,
Silla

On Thu, Nov 30, 2017 at 5:19 PM, R. David Murray 
wrote:

>
> R. David Murray  added the comment:
>
> This is almost certainly either a duplicate or will be fixed by a PR I
> have pending, that I don't have time to look for right now, that rewrites
> the folder.  I'll try to get to merging that PR soonish, but it might not
> happen before the holidays ;)
>
> --
>
> ___
> Python tracker 
> <https://bugs.python.org/issue32182>
> ___
>

--

___
Python tracker 
<https://bugs.python.org/issue32182>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com