@@ -1247,6 +1247,10 @@ static void Mod_ApplySuperStylesToFace( const rdface_t *in, msurface_t *out )
12471247 out -> superLightStyle = R_AddSuperLightStyle ( loadmodel , lightmaps , lightmapStyles , vertexStyles , lmRects );
12481248}
12491249
1250+ static inline bool verifyChunkElements (lump_t * lump , size_t chunkSize ) {
1251+ return lump -> filelen % chunkSize ;
1252+ }
1253+
12501254
12511255/*
12521256* Mod_LoadQ3BrushModel
@@ -1291,84 +1295,66 @@ void Mod_LoadQ3BrushModel( model_t *mod, model_t *parent, void *buffer, bspForma
12911295 const bool hasLightmaps = (!r_lighting_vertexlight -> integer ) && light_lumps -> filelen > 0 ;
12921296 const bool isBspRavenFormat = mod_bspFormat -> flags & BSP_RAVEN ;
12931297
1294- if ( lightarray_lumps -> filelen % sizeof ( uint16_t ) ) {
1298+ if ((lightarray_lumps -> filelen % sizeof ( uint16_t )) ||
1299+ (nodes_lumps -> filelen % sizeof ( dnode_t )) ||
1300+ (fog_lumps -> filelen % sizeof ( dfog_t )) ||
1301+ (brush_lumps -> filelen % sizeof ( dbrush_t )) ||
1302+ (brushsides_faces_lumps -> filelen % ( isBspRavenFormat ? sizeof ( rdbrushside_t ) : sizeof ( dbrushside_t ) )) ||
1303+ (hasLightmaps && light_lumps -> filelen % lightMapSize ) ||
1304+ (shaderrefs_lumps -> filelen % sizeof ( dshaderref_t )) ||
1305+ (shaderrefs_lumps -> filelen % sizeof ( dshaderref_t )) ||
1306+ (model_lumps -> filelen % sizeof ( dmodel_t )) ||
1307+ (planes_lumps -> filelen % sizeof ( dplane_t )) ||
1308+ (face_lumps -> filelen % ( isBspRavenFormat ? sizeof ( rdface_t ) : sizeof ( dface_t ) ))
1309+ ) {
12951310 ri .Com_Error ( ERR_DROP , "Mod_LoadBrushsides: funny lump size in %s" , loadmodel -> name );
12961311 }
1312+
12971313 uint16_t * const q3_lightarrays = (void * )( mod_base + lightarray_lumps -> fileofs );
12981314 const size_t numlightArrays = lightarray_lumps -> filelen / sizeof ( uint16_t );
12991315
1300- if ( nodes_lumps -> filelen % sizeof ( dnode_t ) ) {
1301- ri .Com_Error ( ERR_DROP , "Mod_LoadBrushsides: funny lump size in %s" , loadmodel -> name );
1302- }
13031316 dnode_t * const q3_nodes = (void * )( mod_base + nodes_lumps -> fileofs );
13041317 const size_t q3_nodes_len = nodes_lumps -> filelen / sizeof ( dnode_t );
13051318
1306- if ( fog_lumps -> filelen % sizeof ( dfog_t ) ) {
1307- ri .Com_Error ( ERR_DROP , "Mod_LoadBrushsides: funny lump size in %s" , loadmodel -> name );
1308- }
13091319 dfog_t * const q3_fogs = (void * )( mod_base + fog_lumps -> fileofs );
13101320 const size_t numFogs = fog_lumps -> filelen / sizeof ( dfog_t );
13111321
1312- if ( brush_lumps -> filelen % sizeof ( dbrush_t ) ) {
1313- ri .Com_Error ( ERR_DROP , "Mod_LoadBrushsides: funny lump size in %s" , loadmodel -> name );
1314- }
1315- const size_t numBrushes = brush_lumps -> filelen / sizeof ( dbrush_t );
13161322 dbrush_t * const q3_brushs = (void * )( mod_base + brush_lumps -> fileofs );
1323+ const size_t numBrushes = brush_lumps -> filelen / sizeof ( dbrush_t );
13171324
1318- if ( brushsides_faces_lumps -> filelen % ( isBspRavenFormat ? sizeof ( rdbrushside_t ) : sizeof ( dbrushside_t ) ) ) {
1319- ri .Com_Error ( ERR_DROP , "Mod_LoadBrushsides: funny lump size in %s" , loadmodel -> name );
1320- }
13211325 const size_t numBrushSides = brushsides_faces_lumps -> filelen / ( isBspRavenFormat ? sizeof ( rdbrushside_t ) : sizeof ( dbrushside_t ) );
13221326 dbrushside_t * const q3_brushSides = (void * )( mod_base + brushsides_faces_lumps -> fileofs );
13231327 rdbrushside_t * const q3_ravenbrushSides = (void * )( mod_base + brushsides_faces_lumps -> fileofs );
13241328
1325- if ( hasLightmaps && light_lumps -> filelen % lightMapSize ) {
1326- ri .Com_Error ( ERR_DROP , "Mod_LoadLighting: funny lump size in %s" , loadmodel -> name );
1327- }
1328-
1329- if ( shaderrefs_lumps -> filelen % sizeof ( dshaderref_t ) ) {
1330- ri .Com_Error ( ERR_DROP , "Mod_LoadSubmodels: funny lump size in %s" , loadmodel -> name );
1331- }
1332-
1333- if ( model_lumps -> filelen % sizeof ( dmodel_t ) ) {
1334- ri .Com_Error ( ERR_DROP , "Mod_LoadSubmodels: funny lump size in %s" , loadmodel -> name );
1335- }
1329+ const size_t modelLen = model_lumps -> filelen / sizeof ( dmodel_t );
1330+ dmodel_t * const q3_model = (void * )( (uint8_t * )buffer + model_lumps -> fileofs );
13361331
1337- // faces
1338- if ( face_lumps -> filelen % ( isBspRavenFormat ? sizeof ( rdface_t ) : sizeof ( dface_t ) ) ) {
1339- ri .Com_Error ( ERR_DROP , "Mod_LoadSubmodels: funny lump size in %s" , loadmodel -> name );
1340- }
1341- dface_t * const q3_faces = (void * )( mod_base + face_lumps -> fileofs );
13421332 const size_t numFaces = face_lumps -> filelen / ( isBspRavenFormat ? sizeof ( rdface_t ) : sizeof ( dface_t ) );
1333+ dface_t * const q3_faces = (void * )( mod_base + face_lumps -> fileofs );
13431334 rdface_t * const q3_ravenFaces = (void * )( mod_base + face_lumps -> fileofs );
13441335
1345- if ( planes_lumps -> filelen % sizeof ( dplane_t ) ) {
1346- ri .Com_Error ( ERR_DROP , "Mod_LoadSubmodels: funny lump size in %s" , loadmodel -> name );
1347- }
1348- dplane_t * const q3_planes = (void * )( mod_base + planes_lumps -> fileofs );
13491336 const size_t numPlanes = planes_lumps -> filelen / sizeof ( dplane_t );
1337+ dplane_t * const q3_planes = (void * )( mod_base + planes_lumps -> fileofs );
13501338
13511339 {
1352- const size_t count = model_lumps -> filelen / sizeof ( dmodel_t );
1353- dmodel_t * const q3_model = (void * )( (uint8_t * )buffer + model_lumps -> fileofs );
13541340
1355- uint8_t * const sub_model_mem = Q_CallocAligned ( count , 16 , sizeof ( mbrushmodel_t ) + sizeof ( model_t ) );
1356- mmodel_t * const models = Q_CallocAligned ( count , 16 , sizeof ( mmodel_t ) );
1341+ uint8_t * const sub_model_mem = Q_CallocAligned ( modelLen , 16 , sizeof ( mbrushmodel_t ) + sizeof ( model_t ) );
1342+ mmodel_t * const models = Q_CallocAligned ( modelLen , 16 , sizeof ( mmodel_t ) );
13571343
13581344 Q_LinkToPool ( models , loadmodel -> mempool );
13591345 Q_LinkToPool ( sub_model_mem , loadmodel -> mempool );
13601346
13611347 model_t * const inline_models = (model_t * )sub_model_mem ;
1362- mbrushmodel_t * const brush_models = (mbrushmodel_t * )( sub_model_mem + ( sizeof ( model_t ) * count ) );
1348+ mbrushmodel_t * const brush_models = (mbrushmodel_t * )( sub_model_mem + ( sizeof ( model_t ) * modelLen ) );
13631349
13641350 loadmodel -> extradata = brush_models ;
13651351
13661352 loadbmodel = brush_models ;
13671353 loadbmodel -> submodels = models ;
1368- loadbmodel -> numsubmodels = count ;
1354+ loadbmodel -> numsubmodels = modelLen ;
13691355 loadbmodel -> inlines = inline_models ;
13701356
1371- for ( size_t i = 0 ; i < count ; i ++ ) {
1357+ for ( size_t i = 0 ; i < modelLen ; i ++ ) {
13721358 inline_models [i ].extradata = & brush_models [i ];
13731359
13741360 for ( size_t j = 0 ; j < 3 ; j ++ ) {
0 commit comments