[2.0.x] Fixed #29176 -- Fixed AbstractBaseUser.normalize_username() crash if username isn't a string.

Backport of 40bac28faa from master
This commit is contained in:
Christophe Mehay 2018-03-01 15:26:40 +01:00 committed by Tim Graham
parent 3cdc88ba53
commit e91ff6e29c
3 changed files with 8 additions and 1 deletions

View File

@ -138,4 +138,4 @@ class AbstractBaseUser(models.Model):
@classmethod @classmethod
def normalize_username(cls, username): 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

View File

@ -28,3 +28,6 @@ Bugfixes
* Fixed crash when using a ``Window()`` expression in a subquery * Fixed crash when using a ``Window()`` expression in a subquery
(:ticket:`29172`). (:ticket:`29172`).
* Fixed ``AbstractBaseUser.normalize_username()`` crash if the ``username``
argument isn't a string (:ticket:`29176`).

View File

@ -12,6 +12,7 @@ from django.core import mail
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from .models import IntegerUsernameUser
from .models.with_custom_email_field import CustomEmailField from .models.with_custom_email_field import CustomEmailField
@ -157,6 +158,9 @@ class UserManagerTestCase(TestCase):
class AbstractBaseUserTests(TestCase): class AbstractBaseUserTests(TestCase):
def test_normalize_username(self):
self.assertEqual(IntegerUsernameUser().normalize_username(123), 123)
def test_clean_normalize_username(self): def test_clean_normalize_username(self):
# The normalization happens in AbstractBaseUser.clean() # The normalization happens in AbstractBaseUser.clean()
ohm_username = 'iamtheΩ' # U+2126 OHM SIGN ohm_username = 'iamtheΩ' # U+2126 OHM SIGN