[utils] Process non-base 10 integers in js_to_json
This commit is contained in:
		| @@ -617,6 +617,15 @@ class TestUtil(unittest.TestCase): | ||||
|         json_code = js_to_json(inp) | ||||
|         self.assertEqual(json.loads(json_code), json.loads(inp)) | ||||
|  | ||||
|         inp = '''{ | ||||
|             0:{src:'skipped', type: 'application/dash+xml'}, | ||||
|             1:{src:'skipped', type: 'application/vnd.apple.mpegURL'}, | ||||
|         }''' | ||||
|         self.assertEqual(js_to_json(inp), '''{ | ||||
|             "0":{"src":"skipped", "type": "application/dash+xml"}, | ||||
|             "1":{"src":"skipped", "type": "application/vnd.apple.mpegURL"} | ||||
|         }''') | ||||
|  | ||||
|     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"}) | ||||
| @@ -652,6 +661,16 @@ class TestUtil(unittest.TestCase): | ||||
|         on = js_to_json("['a\\\nb']") | ||||
|         self.assertEqual(json.loads(on), ['ab']) | ||||
|  | ||||
|         on = js_to_json('{0xff:0xff}') | ||||
|         self.assertEqual(json.loads(on), {'255': 255}) | ||||
|  | ||||
|         on = js_to_json('{077:077}') | ||||
|         self.assertEqual(json.loads(on), {'63': 63}) | ||||
|  | ||||
|         on = js_to_json('{42:42}') | ||||
|         self.assertEqual(json.loads(on), {'42': 42}) | ||||
|  | ||||
|  | ||||
|     def test_extract_attributes(self): | ||||
|         self.assertEqual(extract_attributes('<e x="y">'), {'x': 'y'}) | ||||
|         self.assertEqual(extract_attributes("<e x='y'>"), {'x': 'y'}) | ||||
|   | ||||
| @@ -1925,6 +1925,17 @@ def js_to_json(code): | ||||
|                 '\\x': '\\u00', | ||||
|             }.get(m.group(0), m.group(0)), v[1:-1]) | ||||
|  | ||||
|         INTEGER_TABLE = ( | ||||
|             (r'^(0[xX][0-9a-fA-F]+)', 16), | ||||
|             (r'^(0+[0-7]+)', 8), | ||||
|         ) | ||||
|  | ||||
|         for regex, base in INTEGER_TABLE: | ||||
|             im = re.match(regex, v) | ||||
|             if im: | ||||
|                 i = int(im.group(1), base) | ||||
|                 return '"%d":' % i if v.endswith(':') else '%d' % i | ||||
|  | ||||
|         return '"%s"' % v | ||||
|  | ||||
|     return re.sub(r'''(?sx) | ||||
| @@ -1932,6 +1943,7 @@ def js_to_json(code): | ||||
|         '(?:[^'\\]*(?:\\\\|\\['"nurtbfx/\n]))*[^'\\]*'| | ||||
|         /\*.*?\*/|,(?=\s*[\]}])| | ||||
|         [a-zA-Z_][.a-zA-Z_0-9]*| | ||||
|         (?:0[xX][0-9a-fA-F]+|0+[0-7]+)(?:\s*:)?| | ||||
|         [0-9]+(?=\s*:) | ||||
|         ''', fix_kv, code) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․