mesa/es: Validate glGetMaterial pname in Mesa code rather than the ES wrapper
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 27 Jul 2012 22:57:09 +0000 (15:57 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 29 Aug 2012 22:09:35 +0000 (15:09 -0700)
Fixes a bug that glGetMaterial[fx]v in ES1 contexts would (try to) allow
queries of GL_AMBIENT_AND_DIFFUSE.  This enum can only be used in glMaterial,
not in the get.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/main/APIspec.xml
src/mesa/main/es1_conversion.c
src/mesa/main/light.c

index 6d6462ca49bdbaf482c09a509e2236149ad5b255..e7777a7cbcf57a162eba48b69da05162d5de9014 100644 (file)
                        <param name="param" type="GLtype"/>
                </vector>
        </proto>
-
-       <desc name="face">
-               <value name="GL_FRONT"/>
-               <value name="GL_BACK"/>
-       </desc>
-
-       <desc name="pname">
-               <value name="GL_SHININESS"/>
-               <desc name="params" vector_size="1"/>
-       </desc>
-
-       <desc name="pname">
-               <value name="GL_AMBIENT"/>
-               <value name="GL_DIFFUSE"/>
-               <value name="GL_AMBIENT_AND_DIFFUSE"/>
-               <value name="GL_SPECULAR"/>
-               <value name="GL_EMISSION"/>
-
-               <desc name="params" vector_size="4"/>
-       </desc>
 </template>
 
 <template name="GetString" direction="get">
index c1d7b83306c788a68e3491f53092379b9aecff4d..c1bcfbe1f5749d23ac7d15a9baa42daf9eea8a55 100644 (file)
@@ -293,7 +293,6 @@ _es_GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
       break;
    case GL_AMBIENT:
    case GL_DIFFUSE:
-   case GL_AMBIENT_AND_DIFFUSE:
    case GL_SPECULAR:
    case GL_EMISSION:
       n_params = 4;
index d6fbcd9be2c418393adad778276d4c19ed946d35..a6039353e662c9afab789af51ad176e3dc55882e 100644 (file)
@@ -789,6 +789,10 @@ _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
         *params = mat[MAT_ATTRIB_SHININESS(f)][0];
         break;
       case GL_COLOR_INDEXES:
+         if (ctx->API != API_OPENGL) {
+            _mesa_error( ctx, GL_INVALID_ENUM, "glGetMaterialfv(pname)" );
+            return;
+         }
         params[0] = mat[MAT_ATTRIB_INDEXES(f)][0];
         params[1] = mat[MAT_ATTRIB_INDEXES(f)][1];
         params[2] = mat[MAT_ATTRIB_INDEXES(f)][2];
@@ -807,6 +811,8 @@ _mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
    GLfloat (*mat)[4] = ctx->Light.Material.Attrib;
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* update materials */
 
+   ASSERT(ctx->API == API_OPENGL);
+
    FLUSH_CURRENT(ctx, 0); /* update ctx->Light.Material from vertex buffer */
 
    if (face==GL_FRONT) {