From 271d15f9892b103cf3bd315926ce0af75bde99ee Mon Sep 17 00:00:00 2001 From: mittorn Date: Fri, 1 Nov 2019 13:41:30 +0700 Subject: [PATCH] client: prevent precache overflow --- engine/client/cl_parse.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index 1fffa6da..a82db957 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -1411,6 +1411,36 @@ void CL_ParseResource( sizebuf_t *msg ) if( MSG_ReadOneBit( msg )) MSG_ReadBytes( msg, pResource->rguc_reserved, sizeof( pResource->rguc_reserved )); + if( pResource->type == t_sound && pResource->nIndex > MAX_SOUNDS ) + { + Mem_Free( pResource ); + Host_Error( "bad sound index\n" ); + } + + if( pResource->type == t_model && pResource->nIndex > MAX_MODELS ) + { + Mem_Free( pResource ); + Host_Error( "bad model index\n" ); + } + + if( pResource->type == t_eventscript && pResource->nIndex > MAX_EVENTS ) + { + Mem_Free( pResource ); + Host_Error( "bad event index\n" ); + } + + if( pResource->type == t_generic && pResource->nIndex > MAX_CUSTOM ) + { + Mem_Free( pResource ); + Host_Error( "bad file index\n" ); + } + + if( pResource->type == t_decal && pResource->nIndex > MAX_DECALS ) + { + Mem_Free( pResource ); + Host_Error( "bad decal index\n" ); + } + CL_AddToResourceList( pResource, &cl.resourcesneeded ); }