diff --git a/test/test_devalue.py b/test/test_devalue.py index 5e819d364..29eb89e87 100644 --- a/test/test_devalue.py +++ b/test/test_devalue.py @@ -141,7 +141,7 @@ 'name': 'hole', 'unparsed': -2, 'error': ValueError, - 'pattern': r'invalid input', + 'pattern': r'invalid integer input', }, { 'name': 'string', 'unparsed': 'hello', @@ -150,13 +150,13 @@ }, { 'name': 'number', 'unparsed': 42, - 'error': KeyError, - 'pattern': r'42', + 'error': ValueError, + 'pattern': r'invalid integer input', }, { 'name': 'boolean', 'unparsed': True, - 'error': KeyError, - 'pattern': r'True', + 'error': ValueError, + 'pattern': r'expected int or list as input', }, { 'name': 'null', 'unparsed': None, @@ -170,8 +170,8 @@ }, { 'name': 'empty array', 'unparsed': [], - 'error': IndexError, - 'pattern': r'list index out of range', + 'error': ValueError, + 'pattern': r'expected a non-empty list as input', }, { 'name': 'Python negative indexing', 'unparsed': [[1, 2, 3, 4, 5, 6, 7, -7], 1, 2, 3, 4, 5, 6, 7], diff --git a/yt_dlp/utils/jslib/devalue.py b/yt_dlp/utils/jslib/devalue.py index d7f74add4..bd539e4bf 100644 --- a/yt_dlp/utils/jslib/devalue.py +++ b/yt_dlp/utils/jslib/devalue.py @@ -43,12 +43,14 @@ def parse_iter(parsed: typing.Any, /, *, revivers: dict[str, collections.abc.Cal -6: -0.0, } - if isinstance(parsed, int): - if parsed == -2: - raise ValueError('invalid input') + if isinstance(parsed, int) and not isinstance(parsed, bool): + if parsed not in resolved or parsed == -2: + raise ValueError('invalid integer input') return resolved[parsed] elif not isinstance(parsed, list): raise ValueError('expected int or list as input') + elif not parsed: + raise ValueError('expected a non-empty list as input') if revivers is None: revivers = {}