logo

youtube-dl

[mirror] Download/Watch videos from video hostersgit clone https://hacktivis.me/git/mirror/youtube-dl.git
commit: 47214e46d852e9d7ddf81d69a8e70806e2396c6c
parent 1d8d5a93f7187438587c3a754b53fdf30322cef0
Author: dirkf <fieldhouse@gmx.net>
Date:   Mon, 17 Jul 2023 20:39:11 +0100

[compat] Fix old Pythons broken loading of valueless cookie attributes

Cookie string parsing in Py 2.6.9, probably earlier, requires `=`.
Also 3.2, though the CPython code appears to be OK: 3.1 was also wrong.

Diffstat:

Myoutube_dl/compat.py20++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/youtube_dl/compat.py b/youtube_dl/compat.py @@ -126,12 +126,24 @@ except ImportError: # Python 2 import Cookie as compat_cookies compat_http_cookies = compat_cookies -if sys.version_info[0] == 2: +if sys.version_info[0] == 2 or sys.version_info < (3, 3): class compat_cookies_SimpleCookie(compat_cookies.SimpleCookie): def load(self, rawdata): - if isinstance(rawdata, compat_str): - rawdata = str(rawdata) - return super(compat_cookies_SimpleCookie, self).load(rawdata) + must_have_value = 0 + if not isinstance(rawdata, dict): + if sys.version_info[:2] != (2, 7): + # attribute must have value for parsing + rawdata, must_have_value = re.subn( + r'(?i)(;\s*)(secure|httponly)(\s*(?:;|$))', r'\1\2=\2\3', rawdata) + if sys.version_info[0] == 2: + if isinstance(rawdata, compat_str): + rawdata = str(rawdata) + super(compat_cookies_SimpleCookie, self).load(rawdata) + if must_have_value > 0: + for morsel in self.values(): + for attr in ('secure', 'httponly'): + if morsel.get(attr): + morsel[attr] = True else: compat_cookies_SimpleCookie = compat_cookies.SimpleCookie compat_http_cookies_SimpleCookie = compat_cookies_SimpleCookie