[jsinterp] Do not compile regex

This commit is contained in:
pukkandan 2023-05-24 23:05:20 +05:30
parent 15b2d3db1d
commit 7aeda6cc9e
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39
2 changed files with 6 additions and 2 deletions

View File

@ -8,7 +8,6 @@ import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import math import math
import re
from yt_dlp.jsinterp import JS_Undefined, JSInterpreter from yt_dlp.jsinterp import JS_Undefined, JSInterpreter
@ -275,7 +274,9 @@ class TestJSInterpreter(unittest.TestCase):
def test_regex(self): def test_regex(self):
self._test('function f() { let a=/,,[/,913,/](,)}/; }', None) self._test('function f() { let a=/,,[/,913,/](,)}/; }', None)
self._test('function f() { let a=/,,[/,913,/](,)}/; return a; }', R'/,,[/,913,/](,)}/0')
R''' # We are not compiling regex
jsi = JSInterpreter('function f() { let a=/,,[/,913,/](,)}/; return a; }') jsi = JSInterpreter('function f() { let a=/,,[/,913,/](,)}/; return a; }')
self.assertIsInstance(jsi.call_function('f'), re.Pattern) self.assertIsInstance(jsi.call_function('f'), re.Pattern)
@ -287,6 +288,7 @@ class TestJSInterpreter(unittest.TestCase):
jsi = JSInterpreter(R'function f() { let a=[/[)\\]/]; return a[0]; }') jsi = JSInterpreter(R'function f() { let a=[/[)\\]/]; return a[0]; }')
self.assertEqual(jsi.call_function('f').pattern, r'[)\\]') self.assertEqual(jsi.call_function('f').pattern, r'[)\\]')
'''
@unittest.skip('Not implemented') @unittest.skip('Not implemented')
def test_replace(self): def test_replace(self):

View File

@ -352,8 +352,10 @@ class JSInterpreter:
inner, outer = self._separate(expr, expr[0], 1) inner, outer = self._separate(expr, expr[0], 1)
if expr[0] == '/': if expr[0] == '/':
flags, outer = self._regex_flags(outer) flags, outer = self._regex_flags(outer)
# We don't support regex methods yet, so no point compiling it
inner = f'{inner}/{flags}'
# Avoid https://github.com/python/cpython/issues/74534 # Avoid https://github.com/python/cpython/issues/74534
inner = re.compile(inner[1:].replace('[[', r'[\['), flags=flags) # inner = re.compile(inner[1:].replace('[[', r'[\['), flags=flags)
else: else:
inner = json.loads(js_to_json(f'{inner}{expr[0]}', strict=True)) inner = json.loads(js_to_json(f'{inner}{expr[0]}', strict=True))
if not outer: if not outer: