From ede54330fb38866936c63ebb96c490a2d4b1b58c Mon Sep 17 00:00:00 2001 From: Simon Sawicki Date: Fri, 16 Jan 2026 15:53:32 +0100 Subject: [PATCH] [utils] `devalue`: Fix calling reviver on cached value (#15568) Authored by: Grub4K --- test/test_devalue.py | 6 +++++- yt_dlp/utils/jslib/devalue.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/test_devalue.py b/test/test_devalue.py index 29eb89e87f..a9fdf8c919 100644 --- a/test/test_devalue.py +++ b/test/test_devalue.py @@ -227,9 +227,13 @@ class TestDevalue(unittest.TestCase): {'a': 'b'}, 'revivers (indirect)') self.assertEqual( - devalue.parse([['parse', 1], '{"a":0}'], revivers={'parse': lambda x: json.loads(x)}), + devalue.parse([['parse', 1], '{"a":0}'], revivers={'parse': json.loads}), {'a': 0}, 'revivers (parse)') + self.assertEqual( + devalue.parse([{'a': 1, 'b': 3}, ['EmptyRef', 2], 'false', ['EmptyRef', 2]], revivers={'EmptyRef': json.loads}), + {'a': False, 'b': False}, msg='revivers (duplicate EmptyRef)') + if __name__ == '__main__': unittest.main() diff --git a/yt_dlp/utils/jslib/devalue.py b/yt_dlp/utils/jslib/devalue.py index ac5bd68577..f3a6e18441 100644 --- a/yt_dlp/utils/jslib/devalue.py +++ b/yt_dlp/utils/jslib/devalue.py @@ -62,10 +62,10 @@ def parse_iter(parsed: typing.Any, /, *, revivers: dict[str, collections.abc.Cal if isinstance(source, tuple): name, source, reviver = source try: - resolved[source] = target[index] = reviver(target[index]) + target[index] = reviver(target[index]) except Exception as error: yield TypeError(f'failed to parse {source} as {name!r}: {error}') - resolved[source] = target[index] = None + target[index] = None continue if source in resolved: