Backport ignoring values outside lightgrid to OpenGL1

Fixes possibly of reading memory past end of lightGridData or reading
wrong light grid data (wrapping around to next row).
This commit is contained in:
Zack Middleton committed 2015-07-12 18:17:57 -05:00
1 parent 1bb2bc370d
commit 9f57fea0ee
2 files changed
+10 -6

No files matched your search

+6
View File
@@ -182,6 +182,9 @@ static void R_SetupEntityLightingGrid( trRefEntity_t *ent ) {
data = gridData;
for ( j = 0 ; j < 3 ; j++ ) {
if ( i & (1<<j) ) {
if ( pos[j] + 1 > tr.world->lightGridBounds[j] - 1 ) {
break; // ignore values outside lightgrid
}
factor *= frac[j];
data += gridStep[j];
} else {
@@ -189,6 +192,9 @@ static void R_SetupEntityLightingGrid( trRefEntity_t *ent ) {
}
}
if ( j != 3 ) {
continue;
}
if ( !(data[0]+data[1]+data[2]) ) {
continue; // ignore samples in walls
}
+4 -6
View File
@@ -180,18 +180,15 @@ static void R_SetupEntityLightingGrid( trRefEntity_t *ent, world_t *world ) {
byte *data;
int lat, lng;
vec3_t normal;
qboolean ignore;
#if idppc
float d0, d1, d2, d3, d4, d5;
#endif
factor = 1.0;
data = gridData;
ignore = qfalse;
for ( j = 0 ; j < 3 ; j++ ) {
if ( i & (1<<j) ) {
if ((pos[j] + 1) > world->lightGridBounds[j] - 1)
{
ignore = qtrue; // ignore values outside lightgrid
if ( pos[j] + 1 > world->lightGridBounds[j] - 1 ) {
break; // ignore values outside lightgrid
}
factor *= frac[j];
data += gridStep[j];
@@ -200,8 +197,9 @@ static void R_SetupEntityLightingGrid( trRefEntity_t *ent, world_t *world ) {
}
}
if ( ignore )
if ( j != 3 ) {
continue;
}
if (world->hdrLightGrid)
{