From 095850596114178119a8cc854716ce0cc6e05121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 24 Aug 2007 13:04:48 +0200 Subject: [PATCH] __glXDRIbindTexImage: Fail if no texture bound to pixmap's texture target. We would most likely crash somewhere in Mesa if we tried to continue in this case. --- GL/glx/glxdri.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c index 685683dcc..c1f3eb76b 100644 --- a/GL/glx/glxdri.c +++ b/GL/glx/glxdri.c @@ -374,17 +374,25 @@ __glXDRIbindTexImage(__GLXcontext *baseContext, { RegionPtr pRegion = NULL; PixmapPtr pixmap; - int bpp, override = 0; + int bpp, override = 0, texname; GLenum format, type; ScreenPtr pScreen = glxPixmap->pScreen; __GLXDRIscreen * const screen = (__GLXDRIscreen *) __glXgetActiveScreen(pScreen->myNum); + CALL_GetIntegerv(GET_DISPATCH(), (glxPixmap->target == GL_TEXTURE_2D ? + GL_TEXTURE_BINDING_2D : + GL_TEXTURE_BINDING_RECTANGLE_NV, + &texname)); + + if (!texname) + return __glXError(GLXBadContextState); + pixmap = (PixmapPtr) glxPixmap->pDraw; if (screen->texOffsetStart && screen->driScreen.setTexOffset) { __GLXpixmap **texOffsetOverride = screen->texOffsetOverride; - int i, firstEmpty = 16, texname; + int i, firstEmpty = 16; for (i = 0; i < 16; i++) { if (texOffsetOverride[i] == glxPixmap) @@ -409,11 +417,6 @@ alreadyin: glxPixmap->pDRICtx = &((__GLXDRIcontext*)baseContext)->driContext; - CALL_GetIntegerv(GET_DISPATCH(), (glxPixmap->target == GL_TEXTURE_2D ? - GL_TEXTURE_BINDING_2D : - GL_TEXTURE_BINDING_RECTANGLE_NV, - &texname)); - if (texname == glxPixmap->texname) return Success;