Mesa (master): mesa: added a simple bounds checker to glMap/UnmapBuffer() ( disabled)

Brian Paul brianp at kemper.freedesktop.org
Tue Jun 9 20:12:29 UTC 2009


Module: Mesa
Branch: master
Commit: 4a7fd6323afde7cbe22097ba71a149876a75bc58
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a7fd6323afde7cbe22097ba71a149876a75bc58

Author: Brian Paul <brianp at vmware.com>
Date:   Tue Jun  9 11:53:19 2009 -0600

mesa: added a simple bounds checker to glMap/UnmapBuffer() (disabled)

---

 src/mesa/main/bufferobj.c |   35 +++++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 3e011ef..a49da3d 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -39,6 +39,11 @@
 #include "bufferobj.h"
 
 
+/* Debug flags */
+/*#define VBO_DEBUG*/
+/*#define BOUNDS_CHECK*/
+
+
 #ifdef FEATURE_OES_mapbuffer
 #define DEFAULT_ACCESS GL_WRITE_ONLY;
 #else
@@ -1019,6 +1024,9 @@ _mesa_BufferDataARB(GLenum target, GLsizeiptrARB size,
                 bufObj->Name, size, data, usage);
 #endif
 
+#ifdef BOUNDS_CHECK
+   size += 100;
+#endif
    /* Give the buffer object to the driver!  <data> may be null! */
    ctx->Driver.BufferData( ctx, target, size, data, usage, bufObj );
 }
@@ -1119,6 +1127,17 @@ _mesa_MapBufferARB(GLenum target, GLenum access)
    }
 #endif
 
+#ifdef BOUNDS_CHECK
+   {
+      GLubyte *buf = (GLubyte *) bufObj->Pointer;
+      GLuint i;
+      /* buffer is 100 bytes larger than requested, fill with magic value */
+      for (i = 0; i < 100; i++) {
+         buf[bufObj->Size - i - 1] = 123;
+      }
+   }
+#endif
+
    return bufObj->Pointer;
 }
 
@@ -1145,6 +1164,22 @@ _mesa_UnmapBufferARB(GLenum target)
       return GL_FALSE;
    }
 
+#ifdef BOUNDS_CHECK
+   if (bufObj->Access != GL_READ_ONLY_ARB) {
+      GLubyte *buf = (GLubyte *) bufObj->Pointer;
+      GLuint i;
+      /* check that last 100 bytes are still = magic value */
+      for (i = 0; i < 100; i++) {
+         GLuint pos = bufObj->Size - i - 1;
+         if (buf[pos] != 123) {
+            _mesa_warning(ctx, "Out of bounds buffer object write detected"
+                          " at position %d (value = %u)\n",
+                          pos, buf[pos]);
+         }
+      }
+   }
+#endif
+
 #ifdef VBO_DEBUG
    if (bufObj->Access == GL_WRITE_ONLY_ARB) {
       GLuint i, unchanged = 0;




More information about the mesa-commit mailing list