From eb9ae0aa0e068fc83f16b190148492509578e78f Mon Sep 17 00:00:00 2001 From: esadomer <54475303+esadomer@users.noreply.github.com> Date: Tue, 13 Oct 2026 19:52:27 +0300 Subject: [PATCH] gh-159350: Handle empty lists in strict email.utils.parseaddr --- Lib/email/utils.py | 2 ++ Lib/test/test_email/test_email.py | 5 +++++ .../Library/2026-10-13-20-45-00.gh-issue-159350.pArSad.rst | 2 ++ 3 files changed, 9 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2026-10-13-20-45-00.gh-issue-159350.pArSad.rst diff --git a/Lib/email/utils.py b/Lib/email/utils.py index c8a6d0af37532c..bd8a7445b22adb 100644 --- a/Lib/email/utils.py +++ b/Lib/email/utils.py @@ -349,6 +349,8 @@ def parseaddr(addr, *, strict=True): return addrs[0] if isinstance(addr, list): + if not addr: + return ('', '') addr = addr[0] if not isinstance(addr, str): diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index e40c82bba9af42..b9329420142072 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -3199,6 +3199,11 @@ def test_parseaddr_empty(self): self.assertEqual(utils.parseaddr('<>'), ('', '')) self.assertEqual(utils.formataddr(utils.parseaddr('<>')), '') + def test_parseaddr_empty_list(self): + for strict in (True, False): + with self.subTest(strict=strict): + self.assertEqual(utils.parseaddr([], strict=strict), ('', '')) + def test_parseaddr_multiple_domains(self): self.assertEqual( utils.parseaddr('a@b@c'), diff --git a/Misc/NEWS.d/next/Library/2026-10-13-20-45-00.gh-issue-159350.pArSad.rst b/Misc/NEWS.d/next/Library/2026-10-13-20-45-00.gh-issue-159350.pArSad.rst new file mode 100644 index 00000000000000..d6270e1dec687d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-10-13-20-45-00.gh-issue-159350.pArSad.rst @@ -0,0 +1,2 @@ +Fix :func:`email.utils.parseaddr` raising :exc:`IndexError` for an empty +list in strict mode. It now returns ``('', '')``, as in non-strict mode.