Browse Source

Fixed #22717 -- Auto-corrected missing ending slash in FileSystemStorage

Thanks David Fischer for the report and Moayad Mardini for the
review.
Claude Paroz 11 years ago
parent
commit
fb9d8f0652
2 changed files with 11 additions and 1 deletions
  1. 2 0
      django/core/files/storage.py
  2. 9 1
      tests/file_storage/tests.py

+ 2 - 0
django/core/files/storage.py

@@ -159,6 +159,8 @@ class FileSystemStorage(Storage):
         self.location = abspathu(self.base_location)
         if base_url is None:
             base_url = settings.MEDIA_URL
+        elif not base_url.endswith('/'):
+            base_url += '/'
         self.base_url = base_url
         self.file_permissions_mode = (
             file_permissions_mode if file_permissions_mode is not None

+ 9 - 1
tests/file_storage/tests.py

@@ -96,7 +96,7 @@ class FileStorageTests(unittest.TestCase):
         shutil.rmtree(self.temp_dir)
         shutil.rmtree(self.temp_dir2)
 
-    def test_emtpy_location(self):
+    def test_empty_location(self):
         """
         Makes sure an exception is raised if the location is empty
         """
@@ -239,6 +239,14 @@ class FileStorageTests(unittest.TestCase):
         self.storage.base_url = None
         self.assertRaises(ValueError, self.storage.url, 'test.file')
 
+        # #22717: missing ending slash in base_url should be auto-corrected
+        storage = self.storage_class(location=self.temp_dir,
+            base_url='/no_ending_slash')
+        self.assertEqual(
+            storage.url('test.file'),
+            '%s%s' % (storage.base_url, 'test.file')
+        )
+
     def test_listdir(self):
         """
         File storage returns a tuple containing directories and files.