From 1d5050a294ff6fa009d11d2807255ad24672b8b6 Mon Sep 17 00:00:00 2001 From: Licht-T Date: Fri, 18 May 2018 20:57:16 +0900 Subject: [PATCH 1/2] BUG: Fix the behavior when max_line_length is 0 or None in email.policy --- Lib/email/_header_value_parser.py | 3 ++- Lib/email/policy.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py index d8becee19892c8..60c07d7e7f35e7 100644 --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -68,6 +68,7 @@ """ import re +import sys import urllib # For urllib.parse.unquote from string import hexdigits from collections import OrderedDict @@ -2591,7 +2592,7 @@ def _refold_parse_tree(parse_tree, *, policy): """ # max_line_length 0/None means no limit, ie: infinitely long. - maxlen = policy.max_line_length or float("+inf") + maxlen = policy.max_line_length or sys.maxsize encoding = 'utf-8' if policy.utf8 else 'us-ascii' lines = [''] last_ew = None diff --git a/Lib/email/policy.py b/Lib/email/policy.py index 5131311ac5ef76..611deb50bb5290 100644 --- a/Lib/email/policy.py +++ b/Lib/email/policy.py @@ -3,6 +3,7 @@ """ import re +import sys from email._policybase import Policy, Compat32, compat32, _extend_docstrings from email.utils import _has_surrogates from email.headerregistry import HeaderRegistry as HeaderRegistry @@ -203,7 +204,7 @@ def fold_binary(self, name, value): def _fold(self, name, value, refold_binary=False): if hasattr(value, 'name'): return value.fold(policy=self) - maxlen = self.max_line_length if self.max_line_length else float('inf') + maxlen = self.max_line_length if self.max_line_length else sys.maxsize lines = value.splitlines() refold = (self.refold_source == 'all' or self.refold_source == 'long' and From 7cdddfd958135bc07057e78a843e73947aae82ca Mon Sep 17 00:00:00 2001 From: Licht-T Date: Fri, 18 May 2018 20:58:20 +0900 Subject: [PATCH 2/2] TST: Add test when max_line_length is 0 or None in email.policy --- Lib/test/test_email/test_policy.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Lib/test/test_email/test_policy.py b/Lib/test/test_email/test_policy.py index 8fecb8a5fcd5a8..976f05f0192552 100644 --- a/Lib/test/test_email/test_policy.py +++ b/Lib/test/test_email/test_policy.py @@ -1,4 +1,5 @@ import io +import sys import types import textwrap import unittest @@ -134,6 +135,18 @@ def test_policy_addition(self): for attr, value in expected.items(): self.assertEqual(getattr(added, attr), value) + def test_fold_zero_max_line_length(self): + expected = 'Subject: =?utf-8?q?=C3=A1?=\n' + + msg = email.message.EmailMessage() + msg['Subject'] = 'รก' + + p1 = email.policy.default.clone(max_line_length=0) + p2 = email.policy.default.clone(max_line_length=None) + + self.assertEqual(p1.fold('Subject', msg['Subject']), expected) + self.assertEqual(p2.fold('Subject', msg['Subject']), expected) + def test_register_defect(self): class Dummy: def __init__(self):