1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Fixed #36017 Urlizer email fixed

This commit is contained in:
greg 2024-12-21 18:04:17 +01:00
parent fcd9d08379
commit 890aaca91a
2 changed files with 11 additions and 10 deletions

View File

@ -8,7 +8,8 @@ from collections.abc import Mapping
from html.parser import HTMLParser from html.parser import HTMLParser
from urllib.parse import parse_qsl, quote, unquote, urlencode, urlsplit, urlunsplit from urllib.parse import parse_qsl, quote, unquote, urlencode, urlsplit, urlunsplit
from django.core.exceptions import SuspiciousOperation from django.core.exceptions import SuspiciousOperation, ValidationError
from django.core.validators import validate_email
from django.utils.deprecation import RemovedInDjango60Warning from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.encoding import punycode from django.utils.encoding import punycode
from django.utils.functional import Promise, cached_property, keep_lazy, keep_lazy_text from django.utils.functional import Promise, cached_property, keep_lazy, keep_lazy_text
@ -476,6 +477,10 @@ class Urlizer:
# Dot must be in p2 (e.g. example.com) # Dot must be in p2 (e.g. example.com)
if "." not in p2 or p2.startswith("."): if "." not in p2 or p2.startswith("."):
return False return False
try:
validate_email(value)
except ValidationError:
return False
return True return True

View File

@ -379,15 +379,9 @@ class TestUtilsHtml(SimpleTestCase):
( (
# RFC 6068 requires a mailto URI to percent-encode a number of # RFC 6068 requires a mailto URI to percent-encode a number of
# characters that can appear in <addr-spec>. # characters that can appear in <addr-spec>.
"yes;this=is&a%valid!email@example.com", "yes+this=is&a%valid!email@example.com",
'<a href="mailto:yes%3Bthis%3Dis%26a%25valid%21email@example.com"' '<a href="mailto:yes%2Bthis%3Dis%26a%25valid%21email@example.com"'
">yes;this=is&a%valid!email@example.com</a>", ">yes+this=is&a%valid!email@example.com</a>",
),
(
# Urlizer shouldn't urlize the "?org" part of this. But since
# it does, RFC 6068 requires percent encoding the "?".
"test@example.com?org",
'<a href="mailto:test@example.com%3Forg">test@example.com?org</a>',
), ),
) )
for value, output in tests: for value, output in tests:
@ -407,6 +401,8 @@ class TestUtilsHtml(SimpleTestCase):
"foo@.example.com", "foo@.example.com",
"foo@localhost", "foo@localhost",
"foo@localhost.", "foo@localhost.",
"test@example?;+!.com",
"email me@example.com,then I'll respond",
# trim_punctuation catastrophic tests # trim_punctuation catastrophic tests
"(" * 100_000 + ":" + ")" * 100_000, "(" * 100_000 + ":" + ")" * 100_000,
"(" * 100_000 + "&:" + ")" * 100_000, "(" * 100_000 + "&:" + ")" * 100_000,