diff options
| author | Yen Chi Hsuan <yan12125@gmail.com> | 2016-08-19 20:37:17 +0800 | 
|---|---|---|
| committer | Yen Chi Hsuan <yan12125@gmail.com> | 2016-08-19 20:37:17 +0800 | 
| commit | e4659b45474acb563db0ab4284abdfc80837307e (patch) | |
| tree | d0123c1cc00ea98d40f387c74cb3cd6fcc83cc38 | |
| parent | 9e5751b9fe72f7425e4cb3f22a56b6a95b59e41d (diff) | |
[utils] Correct octal/hexadecimal number detection in js_to_json
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | test/test_utils.py | 3 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 6 | 
3 files changed, 12 insertions, 3 deletions
@@ -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  | 
