diff --git a/repak/src/data.rs b/repak/src/data.rs index cb71aac..37a3cac 100644 --- a/repak/src/data.rs +++ b/repak/src/data.rs @@ -153,7 +153,7 @@ where Some(compression) => { // https://github.com/EpicGames/UnrealEngine/commit/3aad0ff7976be1073005dca2c1282af548b45d89 // Block size must fit into flags field or it may cause unreadable paks for earlier Unreal Engine versions - compression_block_size = 0x10000; + compression_block_size = 0x3e << 11; // max possible block size let mut compressed_size = 0; let mut blocks = vec![]; for chunk in data.as_ref().chunks(compression_block_size as usize) { diff --git a/repak/src/entry.rs b/repak/src/entry.rs index a5fd649..73b514e 100644 --- a/repak/src/entry.rs +++ b/repak/src/entry.rs @@ -282,6 +282,11 @@ impl Entry { let is_uncompressed_size_32_bit_safe = self.uncompressed <= u32::MAX as u64; let is_offset_32_bit_safe = self.offset <= u32::MAX as u64; + assert!( + compression_blocks_count < 0x10_000, + "compression blocks count fits in 16 bits" + ); + let flags = (compression_block_size) | (compression_blocks_count << 6) | ((self.is_encrypted() as u32) << 22)