summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIchlasul Affan <ichlaffterlalu@gmail.com>2020-04-11 08:25:23 +0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-04-15 09:18:40 +0200
commit3e7c39f710ec1895611fa1b337423742eebd0da1 (patch)
tree9f8f2b1aec9559e4da067c93a73651e9add5b938
parentd51c50d836c5cf8db5566da17963f871be554615 (diff)
Fixed #31451 -- Made settings cleansing work with list and tuple settings.
-rw-r--r--django/views/debug.py4
-rw-r--r--tests/view_tests/tests/test_debug.py35
2 files changed, 39 insertions, 0 deletions
diff --git a/django/views/debug.py b/django/views/debug.py
index e6b7d4d821..5078c3d463 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -90,6 +90,10 @@ class SafeExceptionReporterFilter:
cleansed = self.cleansed_substitute
elif isinstance(value, dict):
cleansed = {k: self.cleanse_setting(k, v) for k, v in value.items()}
+ elif isinstance(value, list):
+ cleansed = [self.cleanse_setting('', v) for v in value]
+ elif isinstance(value, tuple):
+ cleansed = tuple([self.cleanse_setting('', v) for v in value])
else:
cleansed = value
except TypeError:
diff --git a/tests/view_tests/tests/test_debug.py b/tests/view_tests/tests/test_debug.py
index 8c64bc343e..a5301b88b7 100644
--- a/tests/view_tests/tests/test_debug.py
+++ b/tests/view_tests/tests/test_debug.py
@@ -1249,6 +1249,41 @@ class ExceptionReporterFilterTests(ExceptionReportTestMixin, LoggingCaptureMixin
{'login': 'cooper', 'password': reporter_filter.cleansed_substitute},
)
+ def test_cleanse_setting_recurses_in_list_tuples(self):
+ reporter_filter = SafeExceptionReporterFilter()
+ initial = [
+ {
+ 'login': 'cooper',
+ 'password': 'secret',
+ 'apps': (
+ {'name': 'app1', 'api_key': 'a06b-c462cffae87a'},
+ {'name': 'app2', 'api_key': 'a9f4-f152e97ad808'},
+ ),
+ 'tokens': ['98b37c57-ec62-4e39', '8690ef7d-8004-4916'],
+ },
+ {'SECRET_KEY': 'c4d77c62-6196-4f17-a06b-c462cffae87a'},
+ ]
+ cleansed = [
+ {
+ 'login': 'cooper',
+ 'password': reporter_filter.cleansed_substitute,
+ 'apps': (
+ {'name': 'app1', 'api_key': reporter_filter.cleansed_substitute},
+ {'name': 'app2', 'api_key': reporter_filter.cleansed_substitute},
+ ),
+ 'tokens': reporter_filter.cleansed_substitute,
+ },
+ {'SECRET_KEY': reporter_filter.cleansed_substitute},
+ ]
+ self.assertEqual(
+ reporter_filter.cleanse_setting('SETTING_NAME', initial),
+ cleansed,
+ )
+ self.assertEqual(
+ reporter_filter.cleanse_setting('SETTING_NAME', tuple(initial)),
+ tuple(cleansed),
+ )
+
def test_request_meta_filtering(self):
request = self.rf.get('/', HTTP_SECRET_HEADER='super_secret')
reporter_filter = SafeExceptionReporterFilter()