summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2008-12-14 18:42:11 -0800
committerXiang, Haihao <haihao.xiang@intel.com>2008-12-17 09:23:07 +0800
commit0d5b1e591b7fb2cf3109b7e147bb3ea6aa8f8b15 (patch)
tree96cd2f88abb5b1f92cf7d72dc7b3bc5f9bea449b
parent75d337f9701fb25004e33aad3d2fad2554cfa2bd (diff)
Perform range checking on app supplied texture base level
It is possible for applications to specify any texture base level, including trivially invalid values (i.e., 47000000). When an app specifies an invalide base level, we should gracefully disable the texture instead of accessing memory outside the gl_texture_object. This fixes an occasional segfault in one of our conformance tests. (cherry picked from commit 1126aa86bf9ca223218695eec1f41c6523068961)
-rw-r--r--src/mesa/main/texobj.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index 2a54ff7ff9..d8e8b559f5 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -383,6 +383,18 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,
t->_Complete = GL_TRUE; /* be optimistic */
+ /* Detect cases where the application set the base level to an invalid
+ * value.
+ */
+ if ((baseLevel < 0) || (baseLevel > MAX_TEXTURE_LEVELS)) {
+ char s[100];
+ _mesa_sprintf(s, "obj %p (%d) base level = %d is invalid",
+ (void *) t, t->Name, baseLevel);
+ incomplete(t, s);
+ t->_Complete = GL_FALSE;
+ return;
+ }
+
/* Always need the base level image */
if (!t->Image[0][baseLevel]) {
char s[100];