diff --git a/setup_tool_dynamic.py b/setup_tool_dynamic.py index cb5a61c..dace1ea 100644 --- a/setup_tool_dynamic.py +++ b/setup_tool_dynamic.py @@ -129,6 +129,13 @@ def _strict_verify_mpq(path): raise remote_packages.RemotePackageError( "Downloaded MPQ has an invalid nested archive offset." ) + if ( + _user_data_size < user_header_size + or _user_data_size > header_offset + ): + raise remote_packages.RemotePackageError( + "Downloaded MPQ has an invalid user-data size." + ) archive_base = header_offset handle.seek(archive_base) header = handle.read(32) @@ -179,7 +186,7 @@ def _strict_verify_mpq(path): raise remote_packages.RemotePackageError( f"Downloaded MPQ uses unsupported format version {format_version}." ) - if sector_size_shift > 16: + if sector_size_shift == 0 or sector_size_shift > 16: raise remote_packages.RemotePackageError( "Downloaded MPQ has an invalid sector-size shift." ) @@ -704,4 +711,4 @@ sys.modules[__name__].__class__ = _DynamicModuleProxy if __name__ == "__main__": root = tk.Tk() app = ModernWowSetupTool(root) - root.mainloop() + root.mainloop() \ No newline at end of file diff --git a/tests/test_strict_runtime_validation.py b/tests/test_strict_runtime_validation.py index ad39ad3..45a94d6 100644 --- a/tests/test_strict_runtime_validation.py +++ b/tests/test_strict_runtime_validation.py @@ -13,13 +13,14 @@ def _classic_mpq_bytes( hash_table_offset=32, block_table_offset=48, inner_magic=b"MPQ\x1A", + sector_size_shift=3, ): header = inner_magic + struct.pack( "