From: Egbert Eich <e...@freedesktop.org>

When glXBindTexImageEXT is called and SWrast is used there will be a crash when
sPriv->swrast_loader->getImage() is called from swrastSetTexBuffer2(). Reason:
no memory has been allocated for the destination thus texImage->Data is NULL.
Call ctx->Driver.TexImage2D() to initialize this. If memory has been allocated
in a previous call free it first.

Fixes: https://bugzilla.novell.com/show_bug.cgi?id=641297

Signed-off-by: Egbert Eich <e...@freedesktop.org>
Adapted-by: Stefan Dirsch <sndir...@suse.com>
Adapted-by: Tobias Johannes Klausmann <tobias.johannes.klausm...@mni.thm.de>
---

I am not sure whether this patch from Q3/2010 is required these days. But
openSUSE still applies it ...
If "yes" it should also land in 9.2, 9.1, 9.0 and 8.0 branches.

---
 src/mesa/drivers/dri/swrast/swrast.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/mesa/drivers/dri/swrast/swrast.c 
b/src/mesa/drivers/dri/swrast/swrast.c
index 332c7b7..b1c67a9 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -67,6 +67,7 @@
 static void swrastSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
                                GLint texture_format, __DRIdrawable *dPriv)
 {
+    GET_CURRENT_CONTEXT(ctx);
     struct dri_context *dri_ctx;
     int x, y, w, h;
     __DRIscreen *sPriv = dPriv->driScreenPriv;
@@ -98,6 +99,13 @@ static void swrastSetTexBuffer2(__DRIcontext *pDRICtx, GLint 
target,
     _mesa_init_teximage_fields(&dri_ctx->Base, texImage,
                               w, h, 1, 0, internalFormat, texFormat);
 
+    if (texImage->Data)
+       ctx->Driver.FreeTexImageData(ctx, texImage);
+
+    ctx->Driver.TexImage2D(ctx, target, 0, internalFormat,
+                          w, h, 0, texture_format, GL_UNSIGNED_INT_8_8_8_8,
+                          NULL, &ctx->Unpack, texObj, texImage);
+
     sPriv->swrast_loader->getImage(dPriv, x, y, w, h, (char *)swImage->Buffer,
                                   dPriv->loaderPrivate);
 
-- 
1.8.1.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to