Browse Source

Fixed #28165 -- Ignored case in FileExtensionValidator's allowed_extensions.

Arne de Laat 7 years ago
parent
commit
681d2599ee
3 changed files with 12 additions and 0 deletions
  1. 2 0
      django/core/validators.py
  2. 1 0
      docs/ref/validators.txt
  3. 9 0
      tests/validators/tests.py

+ 2 - 0
django/core/validators.py

@@ -461,6 +461,8 @@ class FileExtensionValidator:
     code = 'invalid_extension'
 
     def __init__(self, allowed_extensions=None, message=None, code=None):
+        if allowed_extensions is not None:
+            allowed_extensions = [allowed_extension.lower() for allowed_extension in allowed_extensions]
         self.allowed_extensions = allowed_extensions
         if message is not None:
             self.message = message

+ 1 - 0
docs/ref/validators.txt

@@ -286,6 +286,7 @@ to, or in lieu of custom ``field.clean()`` methods.
     Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
     ``'invalid_extension'`` if the extension of ``value.name`` (``value`` is
     a :class:`~django.core.files.File`) isn't found in ``allowed_extensions``.
+    The extension is compared case-insensitively with ``allowed_extensions``.
 
     .. warning::
 

+ 9 - 0
tests/validators/tests.py

@@ -256,6 +256,7 @@ TEST_DATA = [
     (FileExtensionValidator(['']), ContentFile('contents', name='fileWithNoExtension'), None),
     (FileExtensionValidator(['txt']), ContentFile('contents', name='file.txt'), None),
     (FileExtensionValidator(['txt']), ContentFile('contents', name='file.TXT'), None),
+    (FileExtensionValidator(['TXT']), ContentFile('contents', name='file.txt'), None),
     (FileExtensionValidator(), ContentFile('contents', name='file.jpg'), None),
 
     (validate_image_file_extension, ContentFile('contents', name='file.jpg'), None),
@@ -458,6 +459,14 @@ class TestValidatorEquality(TestCase):
             FileExtensionValidator(['txt']),
             FileExtensionValidator(['txt'])
         )
+        self.assertEqual(
+            FileExtensionValidator(['TXT']),
+            FileExtensionValidator(['txt'])
+        )
+        self.assertEqual(
+            FileExtensionValidator(['TXT', 'png']),
+            FileExtensionValidator(['txt', 'png'])
+        )
         self.assertEqual(
             FileExtensionValidator(['txt']),
             FileExtensionValidator(['txt'], code='invalid_extension')