fix bad array indexing in _save_current_init() that caused context state to get clobbered
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 2 Apr 2004 22:07:23 +0000 (22:07 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 2 Apr 2004 22:07:23 +0000 (22:07 +0000)
src/mesa/tnl/t_save_api.c

index 3236e14e4213c35060ec8b0a1545148c7c0e4069..4e85935932f9dc9c8013879375cc1903e3c62464 100644 (file)
@@ -444,7 +444,6 @@ static void _save_upgrade_vertex( GLcontext *ctx,
       tnl->save.counter = ctx->Const.MaxArrayLockSize;
    tnl->save.initial_counter = tnl->save.counter;
 
-
    /* Recalculate all the attrptr[] values:
     */
    for (i = 0, tmp = tnl->save.vertex ; i < _TNL_ATTRIB_MAX ; i++) {
@@ -460,7 +459,6 @@ static void _save_upgrade_vertex( GLcontext *ctx,
     */
    _save_copy_from_current( ctx );
 
-
    /* Replay stored vertices to translate them to new format here.
     *
     * If there are copied vertices and the new (upgraded) attribute
@@ -1534,13 +1532,16 @@ static void _save_current_init( GLcontext *ctx )
    GLint i;
 
    for (i = 0; i < _TNL_ATTRIB_MAT_FRONT_AMBIENT; i++) {
+      ASSERT(i < VERT_ATTRIB_MAX);
       tnl->save.currentsz[i] = &ctx->ListState.ActiveAttribSize[i];
       tnl->save.current[i] = ctx->ListState.CurrentAttrib[i];
    }
 
    for (i = _TNL_ATTRIB_MAT_FRONT_AMBIENT; i < _TNL_ATTRIB_INDEX; i++) {
-      tnl->save.currentsz[i] = &ctx->ListState.ActiveMaterialSize[i];
-      tnl->save.current[i] = ctx->ListState.CurrentMaterial[i];
+      const GLuint j = i - _TNL_ATTRIB_MAT_FRONT_AMBIENT;
+      ASSERT(j < MAT_ATTRIB_MAX);
+      tnl->save.currentsz[i] = &ctx->ListState.ActiveMaterialSize[j];
+      tnl->save.current[i] = ctx->ListState.CurrentMaterial[j];
    }
 
    tnl->save.currentsz[_TNL_ATTRIB_INDEX] = &ctx->ListState.ActiveIndex;