diff options
Diffstat (limited to 'src/mesa/swrast/s_context.c')
-rw-r--r-- | src/mesa/swrast/s_context.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c index 0a81048e6f5..be800d4d594 100644 --- a/src/mesa/swrast/s_context.c +++ b/src/mesa/swrast/s_context.c @@ -27,6 +27,7 @@ */ #include "imports.h" +#include "bufferobj.h" #include "context.h" #include "colormac.h" #include "mtypes.h" @@ -731,3 +732,25 @@ _swrast_print_vertex( GLcontext *ctx, const SWvertex *v ) _mesa_debug(ctx, "\n"); } } + + +/** + * Validate access to a PBO to be sure we're not going to read/write + * out of buffer bounds. + */ +GLvoid * +_swrast_validate_pbo_access(const struct gl_pixelstore_attrib *pack, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, GLvoid *ptr) +{ + if (pack->BufferObj->Name == 0) { + /* no PBO */ + return ptr; + } + else if (_mesa_validate_pbo_access(pack, width, height, depth, format, + type, ptr)) { + return ADD_POINTERS(pack->BufferObj->Data, ptr); + } + /* bad access! */ + return NULL; +} |