From 057429fde13d716b95ba5144e3353cdc64bf5f93 Mon Sep 17 00:00:00 2001 From: Truman Kilen Date: Sat, 18 Jan 2025 15:21:29 -0600 Subject: [PATCH] Add compression block size assert to ensure pak version compatibility --- repak/src/entry.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/repak/src/entry.rs b/repak/src/entry.rs index e0311a1..3c9fb76 100644 --- a/repak/src/entry.rs +++ b/repak/src/entry.rs @@ -275,10 +275,19 @@ impl Entry { } pub fn write_encoded(&self, writer: &mut W) -> Result<(), super::Error> { - let mut compression_block_size = (self.compression_block_size >> 11) & 0x3f; - if (compression_block_size << 11) != self.compression_block_size { - compression_block_size = 0x3f; + let compression_block_size = (self.compression_block_size >> 11) & 0x3f; + if (compression_block_size << 11) != self.compression_block_size + || compression_block_size == 0x3f + { + // https://github.com/EpicGames/UnrealEngine/commit/3aad0ff7976be1073005dca2c1282af548b45d89 + panic!( + "Unsupported compression block size: {}. Block size must fit into flags field or it may cause unreadable paks for earlier Unreal Engine versions.", + self.compression_block_size + ); } + //if (compression_block_size << 11) != self.compression_block_size { + // compression_block_size = 0x3f; + //} let compression_blocks_count = if self.compression_slot.is_some() { self.blocks.as_ref().unwrap().len() as u32 } else { @@ -298,9 +307,9 @@ impl Entry { writer.write_u32::(flags)?; - if compression_block_size == 0x3f { - writer.write_u32::(self.compression_block_size)?; - } + //if compression_block_size == 0x3f { + // writer.write_u32::(self.compression_block_size)?; + //} if is_offset_32_bit_safe { writer.write_u32::(self.offset as u32)?;