Skip to content

Commit 3e7c39f

Browse files
ichlaffterlalufelixxm
authored andcommitted
Fixed #31451 -- Made settings cleansing work with list and tuple settings.
1 parent d51c50d commit 3e7c39f

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

django/views/debug.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ def cleanse_setting(self, key, value):
9090
cleansed = self.cleansed_substitute
9191
elif isinstance(value, dict):
9292
cleansed = {k: self.cleanse_setting(k, v) for k, v in value.items()}
93+
elif isinstance(value, list):
94+
cleansed = [self.cleanse_setting('', v) for v in value]
95+
elif isinstance(value, tuple):
96+
cleansed = tuple([self.cleanse_setting('', v) for v in value])
9397
else:
9498
cleansed = value
9599
except TypeError:

tests/view_tests/tests/test_debug.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,6 +1249,41 @@ def test_cleanse_setting_recurses_in_dictionary(self):
12491249
{'login': 'cooper', 'password': reporter_filter.cleansed_substitute},
12501250
)
12511251

1252+
def test_cleanse_setting_recurses_in_list_tuples(self):
1253+
reporter_filter = SafeExceptionReporterFilter()
1254+
initial = [
1255+
{
1256+
'login': 'cooper',
1257+
'password': 'secret',
1258+
'apps': (
1259+
{'name': 'app1', 'api_key': 'a06b-c462cffae87a'},
1260+
{'name': 'app2', 'api_key': 'a9f4-f152e97ad808'},
1261+
),
1262+
'tokens': ['98b37c57-ec62-4e39', '8690ef7d-8004-4916'],
1263+
},
1264+
{'SECRET_KEY': 'c4d77c62-6196-4f17-a06b-c462cffae87a'},
1265+
]
1266+
cleansed = [
1267+
{
1268+
'login': 'cooper',
1269+
'password': reporter_filter.cleansed_substitute,
1270+
'apps': (
1271+
{'name': 'app1', 'api_key': reporter_filter.cleansed_substitute},
1272+
{'name': 'app2', 'api_key': reporter_filter.cleansed_substitute},
1273+
),
1274+
'tokens': reporter_filter.cleansed_substitute,
1275+
},
1276+
{'SECRET_KEY': reporter_filter.cleansed_substitute},
1277+
]
1278+
self.assertEqual(
1279+
reporter_filter.cleanse_setting('SETTING_NAME', initial),
1280+
cleansed,
1281+
)
1282+
self.assertEqual(
1283+
reporter_filter.cleanse_setting('SETTING_NAME', tuple(initial)),
1284+
tuple(cleansed),
1285+
)
1286+
12521287
def test_request_meta_filtering(self):
12531288
request = self.rf.get('/', HTTP_SECRET_HEADER='super_secret')
12541289
reporter_filter = SafeExceptionReporterFilter()

0 commit comments

Comments
 (0)