fix for-loop in _mesa_GetDouble to avoid out of bounds memory read
[mesa.git] / src / mesa / main / clip.c
index 31e6af91bd1a99f8361d8478590d0de1788723a0..a1eda32ebf73230e949b4318def61d7bfe2efd37 100644 (file)
@@ -117,3 +117,45 @@ _mesa_GetClipPlane( GLenum plane, GLdouble *equation )
    equation[3] = (GLdouble) ctx->Transform.EyeUserPlane[p][3];
 }
 
+void GLAPIENTRY 
+_mesa_CullParameterfvEXT (GLenum cap, GLfloat *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   switch (cap) {
+   case GL_CULL_VERTEX_EYE_POSITION_EXT:
+      FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
+      COPY_4FV(ctx->Transform.CullEyePos, v);
+      
+      _mesa_transform_vector( ctx->Transform.CullObjPos, 
+                             ctx->Transform.CullEyePos,
+                             ctx->ModelviewMatrixStack.Top->inv );
+      break;
+
+   case GL_CULL_VERTEX_OBJECT_POSITION_EXT:
+      FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
+      COPY_4FV(ctx->Transform.CullObjPos, v);
+
+      _mesa_transform_vector( ctx->Transform.CullEyePos, 
+                             ctx->Transform.CullObjPos,
+                             ctx->ModelviewMatrixStack.Top->m );
+     break;
+   default:
+      _mesa_error( ctx, GL_INVALID_ENUM, "glCullParameterfvEXT" );
+   }
+}
+
+void GLAPIENTRY 
+_mesa_CullParameterdvEXT (GLenum cap, GLdouble *v)
+{
+   GLfloat f[4];
+   
+   f[0] = (GLfloat)v[0];
+   f[1] = (GLfloat)v[1];
+   f[2] = (GLfloat)v[2];
+   f[3] = (GLfloat)v[3];
+
+   _mesa_CullParameterfvEXT(cap, f);
+}
+