[ie/youtube] Fix PO token sanitization for Python>=3.14.4 (#16453)

Ref: https://github.com/python/cpython/issues/145264

Authored by: syphyr
This commit is contained in:
Deltadroid 2026-04-11 01:31:55 +02:00 committed by GitHub
parent c229d4b620
commit 9c1f3cf337
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -6,6 +6,7 @@ import dataclasses
import datetime as dt import datetime as dt
import hashlib import hashlib
import json import json
import re
import traceback import traceback
import typing import typing
import urllib.parse import urllib.parse
@ -433,9 +434,13 @@ def provider_display_list(providers: Iterable[IEContentProvider]):
def clean_pot(po_token: str): def clean_pot(po_token: str):
# Clean and validate the PO Token. This will strip invalid characters off # Clean and validate the PO Token. This will strip invalid characters off
# (e.g. additional url params the user may accidentally include) # (e.g. additional url params the user may accidentally include)
mobj = re.match(r'([^?&#]+)', urllib.parse.unquote(po_token))
if not mobj:
raise ValueError('Invalid PO Token')
try: try:
return base64.urlsafe_b64encode( return base64.urlsafe_b64encode(
base64.urlsafe_b64decode(urllib.parse.unquote(po_token))).decode() base64.urlsafe_b64decode(mobj.group(1))).decode()
except (binascii.Error, ValueError): except (binascii.Error, ValueError):
raise ValueError('Invalid PO Token') raise ValueError('Invalid PO Token')