patterns/q3demo: Quake 3 demos: Handle corrupted files more gracefully (#414)

Quake 3 demos: Basic safeguard against corrupted files

Co-authored-by: Tom <tomarrowtomarrow@hotmail.com>
This commit is contained in:
Tom Arrow
2025-08-31 09:31:20 +00:00
committed by GitHub
parent 76f850c543
commit 70dd55aa6b

View File

@@ -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)];
};