diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2022-10-12 07:35:42 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-12 07:35:42 +0000 |
commit | dc1432e0dd2b826bbf5aee3e87d8270c151e4912 (patch) | |
tree | 276c27910e8ec38a1a054df02c67f73a84cb35df /modules/safe.py | |
parent | 1d64976dbc5a0f3124567b91fadd5014a9d93c5f (diff) | |
parent | ca5efc316b9431746ff886d259275310f63f95fb (diff) | |
download | stable-diffusion-webui-gfx803-dc1432e0dd2b826bbf5aee3e87d8270c151e4912.tar.gz stable-diffusion-webui-gfx803-dc1432e0dd2b826bbf5aee3e87d8270c151e4912.tar.bz2 stable-diffusion-webui-gfx803-dc1432e0dd2b826bbf5aee3e87d8270c151e4912.zip |
Merge branch 'master' into feature/scale_to
Diffstat (limited to 'modules/safe.py')
-rw-r--r-- | modules/safe.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/modules/safe.py b/modules/safe.py index 4d06f2a5..20be16a5 100644 --- a/modules/safe.py +++ b/modules/safe.py @@ -10,6 +10,11 @@ import torch import numpy
import _codecs
import zipfile
+import re
+
+
+# PyTorch 1.13 and later have _TypedStorage renamed to TypedStorage
+TypedStorage = torch.storage.TypedStorage if hasattr(torch.storage, 'TypedStorage') else torch.storage._TypedStorage
def encode(*args):
@@ -20,7 +25,7 @@ def encode(*args): class RestrictedUnpickler(pickle.Unpickler):
def persistent_load(self, saved_id):
assert saved_id[0] == 'storage'
- return torch.storage._TypedStorage()
+ return TypedStorage()
def find_class(self, module, name):
if module == 'collections' and name == 'OrderedDict':
@@ -50,11 +55,27 @@ class RestrictedUnpickler(pickle.Unpickler): raise pickle.UnpicklingError(f"global '{module}/{name}' is forbidden")
+allowed_zip_names = ["archive/data.pkl", "archive/version"]
+allowed_zip_names_re = re.compile(r"^archive/data/\d+$")
+
+
+def check_zip_filenames(filename, names):
+ for name in names:
+ if name in allowed_zip_names:
+ continue
+ if allowed_zip_names_re.match(name):
+ continue
+
+ raise Exception(f"bad file inside {filename}: {name}")
+
+
def check_pt(filename):
try:
# new pytorch format is a zip file
with zipfile.ZipFile(filename) as z:
+ check_zip_filenames(filename, z.namelist())
+
with z.open('archive/data.pkl') as file:
unpickler = RestrictedUnpickler(file)
unpickler.load()
|