swrast: allocate swrast_texture_image::ImageSlices array if needed
authorBrian Paul <brianp@vmware.com>
Wed, 23 Apr 2014 15:49:58 +0000 (09:49 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 24 Apr 2014 14:16:01 +0000 (08:16 -0600)
Fixes a segmentation fault in conform divzero.c test.
This happens when glTexImage(level, width=0, height=0) is called.  We
don't allocate texture memory in that case so the ImageSlices array
was never allocated.

Cc: "10.1" <mesa-stable@lists.freedesktop.org>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
src/mesa/swrast/s_texture.c

index c08a4e9d1e45e5f31e4b0c863cbd0ea7da64d734..1d449a2b44df7e873e54c4f46a04b8b38ba1dcef 100644 (file)
@@ -279,6 +279,13 @@ _swrast_map_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
             continue;
          }
 
+         if (!swImage->ImageSlices) {
+            swImage->ImageSlices =
+               calloc(texture_slices(texImage), sizeof(void *));
+            if (!swImage->ImageSlices)
+               continue;
+         }
+
          for (i = 0; i < texture_slices(texImage); i++) {
             GLubyte *map;
             GLint rowStride;
@@ -325,6 +332,9 @@ _swrast_unmap_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
          if (swImage->Buffer)
             return;
 
+         if (!swImage->ImageSlices)
+            continue;
+
          for (i = 0; i < texture_slices(texImage); i++) {
             if (swImage->ImageSlices[i]) {
                ctx->Driver.UnmapTextureImage(ctx, texImage, i);