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:
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