mesa: Prevent possible array out-of-bounds access by _mesa_light.

This commit is contained in:
Vinson Lee 2010-01-04 12:06:04 -08:00
parent e661bf5018
commit 6130bb1391
1 changed files with 32 additions and 15 deletions

View File

@ -1043,22 +1043,39 @@ _mesa_PopAttrib(void)
_math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); _math_matrix_analyse( ctx->ModelviewMatrixStack.Top );
for (i = 0; i < ctx->Const.MaxLights; i++) { for (i = 0; i < ctx->Const.MaxLights; i++) {
const struct gl_light *l = &light->Light[i]; const struct gl_light *l = &light->Light[i];
_mesa_set_enable(ctx, GL_LIGHT0 + i, l->Enabled); _mesa_set_enable(ctx, GL_LIGHT0 + i, l->Enabled);
_mesa_light(ctx, i, GL_AMBIENT, l->Ambient); _mesa_light(ctx, i, GL_AMBIENT, l->Ambient);
_mesa_light(ctx, i, GL_DIFFUSE, l->Diffuse); _mesa_light(ctx, i, GL_DIFFUSE, l->Diffuse);
_mesa_light(ctx, i, GL_SPECULAR, l->Specular ); _mesa_light(ctx, i, GL_SPECULAR, l->Specular );
_mesa_light(ctx, i, GL_POSITION, l->EyePosition); _mesa_light(ctx, i, GL_POSITION, l->EyePosition);
_mesa_light(ctx, i, GL_SPOT_DIRECTION, l->SpotDirection); _mesa_light(ctx, i, GL_SPOT_DIRECTION, l->SpotDirection);
_mesa_light(ctx, i, GL_SPOT_EXPONENT, &l->SpotExponent); {
_mesa_light(ctx, i, GL_SPOT_CUTOFF, &l->SpotCutoff); GLfloat p[4] = { 0 };
_mesa_light(ctx, i, GL_CONSTANT_ATTENUATION, p[0] = l->SpotExponent;
&l->ConstantAttenuation); _mesa_light(ctx, i, GL_SPOT_EXPONENT, p);
_mesa_light(ctx, i, GL_LINEAR_ATTENUATION, }
&l->LinearAttenuation); {
_mesa_light(ctx, i, GL_QUADRATIC_ATTENUATION, GLfloat p[4] = { 0 };
&l->QuadraticAttenuation); p[0] = l->SpotCutoff;
} _mesa_light(ctx, i, GL_SPOT_CUTOFF, p);
}
{
GLfloat p[4] = { 0 };
p[0] = l->ConstantAttenuation;
_mesa_light(ctx, i, GL_CONSTANT_ATTENUATION, p);
}
{
GLfloat p[4] = { 0 };
p[0] = l->LinearAttenuation;
_mesa_light(ctx, i, GL_LINEAR_ATTENUATION, p);
}
{
GLfloat p[4] = { 0 };
p[0] = l->QuadraticAttenuation;
_mesa_light(ctx, i, GL_QUADRATIC_ATTENUATION, p);
}
}
/* light model */ /* light model */
_mesa_LightModelfv(GL_LIGHT_MODEL_AMBIENT, _mesa_LightModelfv(GL_LIGHT_MODEL_AMBIENT,
light->Model.Ambient); light->Model.Ambient);