|
13 | 13 |
|
14 | 14 | from lzma import LZMACompressor
|
15 | 15 | from lzma import LZMADecompressor
|
| 16 | +from lzma import LZMAError |
16 | 17 |
|
17 | 18 | from Cryptodome import Random
|
18 | 19 | from Cryptodome.Cipher import AES
|
@@ -186,15 +187,27 @@ def __init__(self, urlstate_data=None, encryption_key=None):
|
186 | 187 | raise ValueError("If an 'urlstate_data' is supplied 'encrypt_key' must be specified.")
|
187 | 188 |
|
188 | 189 | if urlstate_data:
|
189 |
| - urlstate_data = urlstate_data.encode("utf-8") |
190 |
| - urlstate_data = base64.urlsafe_b64decode(urlstate_data) |
191 |
| - lzma = LZMADecompressor() |
192 |
| - urlstate_data = lzma.decompress(urlstate_data) |
193 |
| - urlstate_data = _AESCipher(encryption_key).decrypt(urlstate_data) |
194 |
| - lzma = LZMADecompressor() |
195 |
| - urlstate_data = lzma.decompress(urlstate_data) |
196 |
| - urlstate_data = urlstate_data.decode("UTF-8") |
197 |
| - urlstate_data = json.loads(urlstate_data) |
| 190 | + try: |
| 191 | + urlstate_data_bytes = urlstate_data.encode("utf-8") |
| 192 | + urlstate_data_b64decoded = base64.urlsafe_b64decode(urlstate_data_bytes) |
| 193 | + lzma = LZMADecompressor() |
| 194 | + urlstate_data_decompressed = lzma.decompress(urlstate_data_b64decoded) |
| 195 | + urlstate_data_decrypted = _AESCipher(encryption_key).decrypt( |
| 196 | + urlstate_data_decompressed |
| 197 | + ) |
| 198 | + lzma = LZMADecompressor() |
| 199 | + urlstate_data_decrypted_decompressed = lzma.decompress(urlstate_data_decrypted) |
| 200 | + urlstate_data_obj = json.loads(urlstate_data_decrypted_decompressed) |
| 201 | + except Exception as e: |
| 202 | + error_context = { |
| 203 | + "message": "Failed to load state data. Reinitializing empty state.", |
| 204 | + "reason": str(e), |
| 205 | + "urlstate_data": urlstate_data, |
| 206 | + } |
| 207 | + logger.warning(error_context) |
| 208 | + urlstate_data = {} |
| 209 | + else: |
| 210 | + urlstate_data = urlstate_data_obj |
198 | 211 |
|
199 | 212 | session_id = (
|
200 | 213 | urlstate_data[_SESSION_ID_KEY]
|
|
0 commit comments