From 70dd55aa6b1d2cc16dbbec136805b620e48ca097 Mon Sep 17 00:00:00 2001 From: Tom Arrow Date: Sun, 31 Aug 2025 09:31:20 +0000 Subject: [PATCH] patterns/q3demo: Quake 3 demos: Handle corrupted files more gracefully (#414) Quake 3 demos: Basic safeguard against corrupted files Co-authored-by: Tom --- patterns/q3demo.hexpat | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/patterns/q3demo.hexpat b/patterns/q3demo.hexpat index 4d013f2..015c224 100644 --- a/patterns/q3demo.hexpat +++ b/patterns/q3demo.hexpat @@ -118,10 +118,15 @@ fn readString(ref auto data, s32 len, s32 bitindex){ return test; }; +bool corrupted = false; + struct Message { le s32 messageNum; le s32 len; - if(len != FINAL_DEMO_MESSAGE_LENGTH || messageNum != FINAL_DEMO_MESSAGE_NUMBER) { + if(len+$ > std::mem::size()){ + corrupted = true; + } + if(!corrupted && (len != FINAL_DEMO_MESSAGE_LENGTH || messageNum != FINAL_DEMO_MESSAGE_NUMBER)) { u8 data[len]; if( len>=10){ // should usually be true unless corrupted @@ -189,7 +194,7 @@ namespace format { } struct Q3Demo { - Message messages[while(!std::mem::eof())]; + Message messages[while(!std::mem::eof() && !corrupted)]; };