From: lordhavoc Date: Tue, 21 May 2002 02:32:04 +0000 (+0000) Subject: validate animations in zym models X-Git-Tag: RELEASE_0_2_0_RC1~506 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=cfd220bb54e467f6227217a6beb3c49e6c3ffd87;p=xonotic%2Fdarkplaces.git validate animations in zym models git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@1855 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/model_alias.c b/model_alias.c index eb5696a4..e80ee4db 100644 --- a/model_alias.c +++ b/model_alias.c @@ -774,7 +774,7 @@ static void zymswapintblock(int *m, int size) void Mod_LoadZymoticModel(model_t *mod, void *buffer) { - int i, pbase, *bonecount; + int i, pbase, *bonecount, numposes; unsigned int count, a, b, c, *renderlist, *renderlistend; rtexture_t **texture; char *shadername; @@ -845,6 +845,7 @@ void Mod_LoadZymoticModel(model_t *mod, void *buffer) loadmodel->skinframes->glow = NULL; loadmodel->skinframes->merged = NULL; loadmodel->numskins = 1; + numposes = pheader->lump_poses.length / sizeof(float[3][4]) / pheader->numbones; // go through the lumps, swapping things @@ -867,6 +868,12 @@ void Mod_LoadZymoticModel(model_t *mod, void *buffer) loadmodel->animscenes[i].framerate = scene->framerate; loadmodel->animscenes[i].loop = (scene->flags & ZYMSCENEFLAG_NOLOOP) == 0; + if ((unsigned int) loadmodel->animscenes[i].firstframe >= numposes) + Host_Error("Mod_LoadZymoticModel: scene firstframe (%i) >= numposes (%i)\n", loadmodel->animscenes[i].firstframe, numposes); + if ((unsigned int) loadmodel->animscenes[i].firstframe + (unsigned int) loadmodel->animscenes[i].framecount > numposes) + Host_Error("Mod_LoadZymoticModel: scene firstframe (%i) + framecount (%i) >= numposes (%i)\n", loadmodel->animscenes[i].firstframe, loadmodel->animscenes[i].framecount, numposes); + if (loadmodel->animscenes[i].framerate < 0) + Host_Error("Mod_LoadZymoticModel: scene framerate (%f) < 0\n", loadmodel->animscenes[i].framerate); scene++; }