[jsinterp] Fix undefined variable name caching (#13677)

Fix b342d27f3f

Authored by: bashonly
This commit is contained in:
bashonly
2025-07-09 15:45:47 -05:00
committed by GitHub
parent aa9f1f4d57
commit 805519bfaa
3 changed files with 12 additions and 2 deletions

View File

@@ -536,6 +536,11 @@ class TestJSInterpreter(unittest.TestCase):
}
''', 31)
def test_undefined_varnames(self):
jsi = JSInterpreter('function f(){ var a; return [a, b]; }')
self._test(jsi, [JS_Undefined, JS_Undefined])
self.assertEqual(jsi._undefined_varnames, {'b'})
if __name__ == '__main__':
unittest.main()

View File

@@ -373,6 +373,10 @@ _NSIG_TESTS = [
'https://www.youtube.com/s/player/e12fbea4/player_ias_tce.vflset/en_US/base.js',
'kM5r52fugSZRAKHfo3', 'XkeRfXIPOkSwfg',
),
(
'https://www.youtube.com/s/player/ef259203/player_ias_tce.vflset/en_US/base.js',
'rPqBC01nJpqhhi2iA2U', 'hY7dbiKFT51UIA',
),
]

View File

@@ -677,8 +677,9 @@ class JSInterpreter:
# Set value as JS_Undefined or its pre-existing value
local_vars.set_local(var, ret)
else:
ret = local_vars.get(var, JS_Undefined)
if ret is JS_Undefined:
ret = local_vars.get(var, NO_DEFAULT)
if ret is NO_DEFAULT:
ret = JS_Undefined
self._undefined_varnames.add(var)
return ret, should_return