FIX PICKLE

This commit is contained in:
pwn
2025-12-14 10:49:32 +03:00
parent 9fb29bda4a
commit 2146e4ea8a

View File

@@ -1,57 +1,35 @@
import socket import socket
import pickle import json
import base64 import base64
import ipaddress import ipaddress
from urllib.parse import urlparse from urllib.parse import urlparse
def load_artwork_settings(settings_data): def load_artwork_settings(settings_data):
if not settings_data:
return None
try: try:
if not settings_data: # Пробуем base64 + JSON
return None
try: try:
padding = len(settings_data) % 4 raw = base64.b64decode(settings_data)
if padding: return json.loads(raw)
settings_data_padded = settings_data + '=' * (4 - padding)
else:
settings_data_padded = settings_data
raw = base64.b64decode(settings_data_padded)
if raw[:2] in (b'\x80\x03', b'\x80\x04', b'\x80\x05', b'\x80\x02'):
settings = pickle.loads(raw)
if hasattr(settings, '__dict__'):
return settings.__dict__
elif isinstance(settings, dict):
return settings
else:
return {'data': str(settings)}
except: except:
pass pass
# Просто JSON
try:
return json.loads(settings_data)
except:
pass
# Fallback — plain text description
return {'description': settings_data}
except:
return {'description': settings_data} return {'description': settings_data}
except Exception as e:
return {'error': str(e)}
def save_artwork_description(description): def save_artwork_description(description):
if not description: if not description:
return None return None
return json.dumps({'description': description})
try:
padding = len(description) % 4
if padding:
padded = description + '=' * (4 - padding)
else:
padded = description
raw = base64.b64decode(padded)
if raw[:2] in (b'\x80\x03', b'\x80\x04', b'\x80\x05', b'\x80\x02'):
return description
except:
pass
return description
class ArtworkConfig: class ArtworkConfig: