@@ -116,7 +116,6 @@ def check_file_type(input_) -> (FileType, EndianBinaryReader):
116116
117117 # check if AssetsFile
118118 old_endian = reader .endian
119- assets_file = True
120119 # read as if assetsfile and check version
121120 # ReadHeader
122121 reader .Position = 0
@@ -125,43 +124,29 @@ def check_file_type(input_) -> (FileType, EndianBinaryReader):
125124 version = reader .read_u_int ()
126125 data_offset = reader .read_u_int ()
127126
128- if version >= 9 :
127+ if version >= 22 :
129128 endian = ">" if reader .read_boolean () else "<"
130129 reserved = reader .read_bytes (3 )
131- else :
132- reader .Position = file_size - metadata_size
133- endian = ">" if reader .read_boolean () else "<"
134-
135- if version >= 22 :
136130 metadata_size = reader .read_u_int ()
137131 file_size = reader .read_long ()
138132 data_offset = reader .read_long ()
139133 unknown = reader .read_long () # unknown
140134
141- reader .endian = endian
142-
143- if (
144- version < 0
145- or version > 100
146- or any (
147- [
148- x < 0 or x > reader .Length
149- for x in [file_size , metadata_size , version , data_offset ]
150- ]
151- )
152- or file_size < metadata_size
153- ):
154- return FileType .ResourceFile , reader
155135
156- if version >= 7 :
157- unity_version = reader .read_string_to_null ()
158- if len ([x for x in re .split (r"\D" , unity_version ) if x != "" ]) < 2 :
159- assets_file = False
160-
161- # check end
136+ # reset
162137 reader .endian = old_endian
163138 reader .Position = 0
164- if assets_file :
165- return FileType .AssetsFile , reader
166- else :
139+ # check info
140+ if any ((
141+ version < 0 ,
142+ version > 100 ,
143+ * [
144+ x < 0 or x > reader .Length
145+ for x in [file_size , metadata_size , version , data_offset ]
146+ ],
147+ file_size < metadata_size ,
148+ file_size < data_offset
149+ )):
167150 return FileType .ResourceFile , reader
151+ else :
152+ return FileType .AssetsFile , reader
0 commit comments