aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYen Chi Hsuan <yan12125@gmail.com>2016-08-19 20:37:17 +0800
committerYen Chi Hsuan <yan12125@gmail.com>2016-08-19 20:37:17 +0800
commite4659b45474acb563db0ab4284abdfc80837307e (patch)
treed0123c1cc00ea98d40f387c74cb3cd6fcc83cc38
parent9e5751b9fe72f7425e4cb3f22a56b6a95b59e41d (diff)
[utils] Correct octal/hexadecimal number detection in js_to_json
-rw-r--r--ChangeLog6
-rw-r--r--test/test_utils.py3
-rw-r--r--youtube_dl/utils.py6
3 files changed, 12 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index e99ffcec6..98a3dbca3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+version <unreleased>
+
+Core
+* Fix js_to_json(): correct octal or hexadecimal number detection
+
+
version 2016.08.19
Core
diff --git a/test/test_utils.py b/test/test_utils.py
index cb578cd53..b83da93b4 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -712,6 +712,9 @@ class TestUtil(unittest.TestCase):
inp = '''{"foo":101}'''
self.assertEqual(js_to_json(inp), '''{"foo":101}''')
+ inp = '''{"duration": "00:01:07"}'''
+ self.assertEqual(js_to_json(inp), '''{"duration": "00:01:07"}''')
+
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 35362e767..0c36c1b80 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -2038,14 +2038,14 @@ def js_to_json(code):
}.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),
+ (r'^(0[xX][0-9a-fA-F]+)\s*:?$', 16),
+ (r'^(0+[0-7]+)\s*:?$', 8),
)
for regex, base in INTEGER_TABLE:
im = re.match(regex, v)
if im:
- i = int(im.group(0), base)
+ i = int(im.group(1), base)
return '"%d":' % i if v.endswith(':') else '%d' % i
return '"%s"' % v