From 1126aa86bf9ca223218695eec1f41c6523068961 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Sun, 14 Dec 2008 18:42:11 -0800 Subject: [PATCH] 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. --- src/mesa/main/texobj.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 2a54ff7ff90..d8e8b559f53 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]; -- 2.30.2