From 7aebe970810d4b86f87eb0539046f30f30cd1405 Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 30 Jun 2025 11:32:34 +0200 Subject: [PATCH] Quake 3 demos: Basic safeguard against corrupted files --- patterns/q3demo.hexpat | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/patterns/q3demo.hexpat b/patterns/q3demo.hexpat index 4d013f28..015c224f 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)]; };