diff --git a/test/test_utils.py b/test/test_utils.py index 2e3cd0179..c9a3a851d 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -743,6 +743,26 @@ class TestUtil(unittest.TestCase): inp = '''{"duration": "00:01:07"}''' self.assertEqual(js_to_json(inp), '''{"duration": "00:01:07"}''') + def test_js_to_json_landofoz(self): + inp = '''{ + character: { + name: "Dorothy", + pet: "Toto", + /* source: "Kansas", + destination: "Emerald City", + roll: "heroine" */ + }, + comment: /* over the rainbow */ "/*", + no_comment: "*/" + }''' + self.assertEqual(js_to_json(inp), '''{ + "character": { + "name": "Dorothy", + "pet": "Toto"\n \n }, + "comment": "/*", + "no_comment": "*/" + }''') + def test_js_to_json_edgecases(self): on = js_to_json("{abc_def:'1\\'\\\\2\\\\\\'3\"4'}") self.assertEqual(json.loads(on), {"abc_def": "1'\\2\\'3\"4"}) diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index bda59e627..548ce12e2 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -2109,14 +2109,11 @@ def js_to_json(code): return '"%s"' % v - # fixing , followed nothing, but comments - # fixing unnecessary ? in /\*.*?\*/ - # fixing greedy comment return re.sub(r'''(?sx) "(?:[^"\\]*(?:\\\\|\\['"nurtbfx/\n]))*[^"\\]*"| '(?:[^'\\]*(?:\\\\|\\['"nurtbfx/\n]))*[^'\\]*'| - ,(?=(\s|(/\*((?!\*/)\n|.)*\*/))*[\]}])| - /\*((?!\*/)\n|.)*\*/|[a-zA-Z_][.a-zA-Z_0-9]*| + ,(?=(?:\s|(?:/\*(?:(?!\*/)(?:\n|.))*\*/))*[\]}])| + /\*(?:(?!\*/)(?:\n|.))*\*/|[a-zA-Z_][.a-zA-Z_0-9]*| \b(?:0[xX][0-9a-fA-F]+|0+[0-7]+)(?:\s*:)?| [0-9]+(?=\s*:) ''', fix_kv, code)