summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Mehay <cmehay@student.42.fr>2018-03-01 15:26:40 +0100
committerTim Graham <timograham@gmail.com>2018-03-02 11:32:53 -0500
commit40bac28faabbacd0875e59455cd80fb1dbb16966 (patch)
treeb21e394a71aab4f70fbe3141a37dda938ecf8973
parenta2e97abd8149e78071806a52282a24c27fe8236b (diff)
Fixed #29176 -- Fixed AbstractBaseUser.normalize_username() crash if username isn't a string.
-rw-r--r--django/contrib/auth/base_user.py2
-rw-r--r--docs/releases/2.0.3.txt3
-rw-r--r--tests/auth_tests/test_models.py4
3 files changed, 8 insertions, 1 deletions
diff --git a/django/contrib/auth/base_user.py b/django/contrib/auth/base_user.py
index 357528e19e..a165677f4c 100644
--- a/django/contrib/auth/base_user.py
+++ b/django/contrib/auth/base_user.py
@@ -138,4 +138,4 @@ class AbstractBaseUser(models.Model):
@classmethod
def normalize_username(cls, username):
- return unicodedata.normalize('NFKC', username) if username else username
+ return unicodedata.normalize('NFKC', username) if isinstance(username, str) else username
diff --git a/docs/releases/2.0.3.txt b/docs/releases/2.0.3.txt
index f4f30b5a30..61c212081b 100644
--- a/docs/releases/2.0.3.txt
+++ b/docs/releases/2.0.3.txt
@@ -28,3 +28,6 @@ Bugfixes
* Fixed crash when using a ``Window()`` expression in a subquery
(:ticket:`29172`).
+
+* Fixed ``AbstractBaseUser.normalize_username()`` crash if the ``username``
+ argument isn't a string (:ticket:`29176`).
diff --git a/tests/auth_tests/test_models.py b/tests/auth_tests/test_models.py
index 32b6d2072b..9438ed8aff 100644
--- a/tests/auth_tests/test_models.py
+++ b/tests/auth_tests/test_models.py
@@ -12,6 +12,7 @@ from django.core import mail
from django.db.models.signals import post_save
from django.test import SimpleTestCase, TestCase, override_settings
+from .models import IntegerUsernameUser
from .models.with_custom_email_field import CustomEmailField
@@ -157,6 +158,9 @@ class UserManagerTestCase(TestCase):
class AbstractBaseUserTests(TestCase):
+ def test_normalize_username(self):
+ self.assertEqual(IntegerUsernameUser().normalize_username(123), 123)
+
def test_clean_normalize_username(self):
# The normalization happens in AbstractBaseUser.clean()
ohm_username = 'iamtheΩ' # U+2126 OHM SIGN