From 5a548e1e8c6a252331b3a8ea040d7312e4f38e0d Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Sun, 21 Jul 2013 01:53:33 +0200 Subject: [PATCH] youtube: Fix crash with weird characters --- modules/youtube/pages.py | 4 ++++ modules/youtube/test.py | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/modules/youtube/pages.py b/modules/youtube/pages.py index 4ab61d4e..48b39068 100644 --- a/modules/youtube/pages.py +++ b/modules/youtube/pages.py @@ -19,6 +19,7 @@ from urlparse import parse_qsl +import re from weboob.capabilities.base import UserError from weboob.tools.browser import BasePage, BrokenPageError, BrowserIncorrectPassword @@ -137,6 +138,9 @@ class VideoPage(BaseYoutubePage): continue sub = text[pos+len(pattern):].rstrip(';\n') + # json spec only allows \u - convert other escape sequences + sub = re.sub(r'\\x([a-f0-9]{2})', r'\u\1', sub) + sub = re.sub(r'\\U([a-f0-9]{4})([a-f0-9]{4})', r'\u\1\u\2', sub) a = json.loads(sub) for part in a['args']['url_encoded_fmt_stream_map'].split(','): diff --git a/modules/youtube/test.py b/modules/youtube/test.py index d1373627..274aa457 100644 --- a/modules/youtube/test.py +++ b/modules/youtube/test.py @@ -37,3 +37,14 @@ class YoutubeTest(BackendTest): def test_latest(self): l = list(self.backend.iter_resources([BaseVideo], [u'latest'])) assert len(l) > 0 + + def test_drm(self): + v = self.backend.get_video('http://youtu.be/UxxajLWwzqY') + self.backend.fillobj(v, ('url',)) + assert len(v.url) + self.backend.browser.openurl(v.url) + + def test_weirdchars(self): + v = self.backend.get_video('https://www.youtube.com/watch?v=BaW_jenozKc') + self.backend.fillobj(v, ('title', 'url',)) + assert unicode(v.title)