Check that texture units/samplers specified with glUniform1i() are legal.
authorBrian <brian@yutani.localnet.net>
Wed, 9 May 2007 14:04:32 +0000 (08:04 -0600)
committerBrian <brian@yutani.localnet.net>
Wed, 9 May 2007 14:07:15 +0000 (08:07 -0600)
src/mesa/shader/shader_api.c

index 64f2a9fa12682be847da004a57147aec6a122cec..3a54e68d0de8374fb31a2aca2dd6efc0b21fcfe0 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5.3
+ * Version:  7.0
  *
  * Copyright (C) 2004-2007  Brian Paul   All Rights Reserved.
  *
@@ -1072,12 +1072,20 @@ _mesa_uniform(GLcontext *ctx, GLint location, GLsizei count,
     * If we're setting a sampler, we must use glUniformi1()!
     */
    if (shProg->Uniforms->Parameters[location].Type == PROGRAM_SAMPLER) {
+      GLint unit;
       if (type != GL_INT || count != 1) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
                      "glUniform(only glUniform1i can be used "
                      "to set sampler uniforms)");
          return;
       }
+      /* check that the sampler (tex unit index) is legal */
+      unit = ((GLint *) values)[0];
+      if (unit >= ctx->Const.MaxTextureImageUnits) {
+         _mesa_error(ctx, GL_INVALID_VALUE,
+                     "glUniform1(invalid sampler/tex unit index)");
+         return;
+      }
    }
 
    if (count < 0) {