diff --git a/django/core/files/storage.py b/django/core/files/storage.py index 977b6a68a8..5d301a317c 100644 --- a/django/core/files/storage.py +++ b/django/core/files/storage.py @@ -231,6 +231,7 @@ class FileSystemStorage(Storage): return name def delete(self, name): + assert name, "The name argument is not allowed to be empty." name = self.path(name) # If the file exists, delete it from the filesystem. # Note that there is a race between os.path.exists and os.remove: diff --git a/tests/file_storage/tests.py b/tests/file_storage/tests.py index 6c3c559660..e6caabf9d9 100644 --- a/tests/file_storage/tests.py +++ b/tests/file_storage/tests.py @@ -364,6 +364,14 @@ class FileStorageTests(unittest.TestCase): with self.assertRaises(IOError): self.storage.save('error.file', f1) + def test_delete_no_name(self): + """ + Calling delete with an empty name should not try to remove the base + storage directory, but fail loudly (#20660). + """ + with self.assertRaises(AssertionError): + self.storage.delete('') + class CustomStorage(FileSystemStorage): def get_available_name(self, name):