From d1309f3bd60d5ec93c582af8f7bc0685537312e0 Mon Sep 17 00:00:00 2001 From: red person Date: Wed, 3 Jun 2026 08:11:05 +0300 Subject: [PATCH] Ignore non-object settings scrub inputs (#1645) --- src/settings_scrub.py | 2 ++ tests/test_settings_scrub.py | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/settings_scrub.py b/src/settings_scrub.py index 614dbf9..6c76438 100644 --- a/src/settings_scrub.py +++ b/src/settings_scrub.py @@ -47,4 +47,6 @@ def _scrub_value(key, value): def scrub_settings(settings: dict) -> dict: """Return a copy of ``settings`` with secret-shaped values masked (deep).""" + if not isinstance(settings, dict): + return {} return {k: _scrub_value(k, v) for k, v in (settings or {}).items()} diff --git a/tests/test_settings_scrub.py b/tests/test_settings_scrub.py index 2d489aa..fe85fc3 100644 --- a/tests/test_settings_scrub.py +++ b/tests/test_settings_scrub.py @@ -59,3 +59,8 @@ def test_empty_and_nonstring_secret_values_untouched(): def test_exact_name_matches(): out = scrub_settings({"password": "p", "token": "t", "secret": "s", "apikey": "a", "key": "k"}) assert all(v == "" for v in out.values()), out + + +def test_non_object_settings_return_empty_mapping(): + assert scrub_settings(["not", "settings"]) == {} + assert scrub_settings("not settings") == {}