summaryrefslogtreecommitdiff
path: root/tests/staticfiles_tests
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2020-08-21 11:44:46 +0200
committerCarlton Gibson <carlton.gibson@noumenal.es>2020-09-01 09:17:23 +0200
commit8d7271578d7b153435b40fe40236ebec43cbf1b9 (patch)
tree8ff6135d4131b005510b2197e537596d5a9d9fca /tests/staticfiles_tests
parent2bc38bc7cae002f949157d95e3f0c19ea6b8ca5c (diff)
downloaddjango-8d7271578d7b153435b40fe40236ebec43cbf1b9.tar.gz
Fixed CVE-2020-24583, #31921 -- Fixed permissions on intermediate-level static and storage directories on Python 3.7+.
Thanks WhiteSage for the report.
Diffstat (limited to 'tests/staticfiles_tests')
-rw-r--r--tests/staticfiles_tests/project/documents/nested/css/base.css1
-rw-r--r--tests/staticfiles_tests/test_storage.py52
2 files changed, 38 insertions, 15 deletions
diff --git a/tests/staticfiles_tests/project/documents/nested/css/base.css b/tests/staticfiles_tests/project/documents/nested/css/base.css
new file mode 100644
index 0000000000..06041ca25f
--- /dev/null
+++ b/tests/staticfiles_tests/project/documents/nested/css/base.css
@@ -0,0 +1 @@
+html {height: 100%;}
diff --git a/tests/staticfiles_tests/test_storage.py b/tests/staticfiles_tests/test_storage.py
index 02704fcbe8..dc45a0b839 100644
--- a/tests/staticfiles_tests/test_storage.py
+++ b/tests/staticfiles_tests/test_storage.py
@@ -4,6 +4,7 @@ import sys
import tempfile
import unittest
from io import StringIO
+from pathlib import Path
from unittest import mock
from django.conf import settings
@@ -457,12 +458,19 @@ class TestStaticFilePermissions(CollectionTestCase):
)
def test_collect_static_files_permissions(self):
call_command('collectstatic', **self.command_params)
- test_file = os.path.join(settings.STATIC_ROOT, "test.txt")
- test_dir = os.path.join(settings.STATIC_ROOT, "subdir")
- file_mode = os.stat(test_file)[0] & 0o777
- dir_mode = os.stat(test_dir)[0] & 0o777
+ static_root = Path(settings.STATIC_ROOT)
+ test_file = static_root / 'test.txt'
+ file_mode = test_file.stat().st_mode & 0o777
self.assertEqual(file_mode, 0o655)
- self.assertEqual(dir_mode, 0o765)
+ tests = [
+ static_root / 'subdir',
+ static_root / 'nested',
+ static_root / 'nested' / 'css',
+ ]
+ for directory in tests:
+ with self.subTest(directory=directory):
+ dir_mode = directory.stat().st_mode & 0o777
+ self.assertEqual(dir_mode, 0o765)
@override_settings(
FILE_UPLOAD_PERMISSIONS=None,
@@ -470,12 +478,19 @@ class TestStaticFilePermissions(CollectionTestCase):
)
def test_collect_static_files_default_permissions(self):
call_command('collectstatic', **self.command_params)
- test_file = os.path.join(settings.STATIC_ROOT, "test.txt")
- test_dir = os.path.join(settings.STATIC_ROOT, "subdir")
- file_mode = os.stat(test_file)[0] & 0o777
- dir_mode = os.stat(test_dir)[0] & 0o777
+ static_root = Path(settings.STATIC_ROOT)
+ test_file = static_root / 'test.txt'
+ file_mode = test_file.stat().st_mode & 0o777
self.assertEqual(file_mode, 0o666 & ~self.umask)
- self.assertEqual(dir_mode, 0o777 & ~self.umask)
+ tests = [
+ static_root / 'subdir',
+ static_root / 'nested',
+ static_root / 'nested' / 'css',
+ ]
+ for directory in tests:
+ with self.subTest(directory=directory):
+ dir_mode = directory.stat().st_mode & 0o777
+ self.assertEqual(dir_mode, 0o777 & ~self.umask)
@override_settings(
FILE_UPLOAD_PERMISSIONS=0o655,
@@ -484,12 +499,19 @@ class TestStaticFilePermissions(CollectionTestCase):
)
def test_collect_static_files_subclass_of_static_storage(self):
call_command('collectstatic', **self.command_params)
- test_file = os.path.join(settings.STATIC_ROOT, "test.txt")
- test_dir = os.path.join(settings.STATIC_ROOT, "subdir")
- file_mode = os.stat(test_file)[0] & 0o777
- dir_mode = os.stat(test_dir)[0] & 0o777
+ static_root = Path(settings.STATIC_ROOT)
+ test_file = static_root / 'test.txt'
+ file_mode = test_file.stat().st_mode & 0o777
self.assertEqual(file_mode, 0o640)
- self.assertEqual(dir_mode, 0o740)
+ tests = [
+ static_root / 'subdir',
+ static_root / 'nested',
+ static_root / 'nested' / 'css',
+ ]
+ for directory in tests:
+ with self.subTest(directory=directory):
+ dir_mode = directory.stat().st_mode & 0o777
+ self.assertEqual(dir_mode, 0o740)
@override_settings(