Added allocation failure checks in shadow_picture and caused it to exit
authordolio <dolio>
Fri, 17 Sep 2004 05:20:35 +0000 (05:20 +0000)
committerdolio <dolio>
Fri, 17 Sep 2004 05:20:35 +0000 (05:20 +0000)
    gracefully rather than writing to unallocated memory.

ChangeLog
xcompmgr.c

index 467e608..556f0f0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-09-17  Dan Doel  <dolio@case.edu>
+
+       * xcompmgr.c: (shadow_picture):
+       Added some tests to check for failed pixmap/picture/gc allocations and
+       exit appropriately.
+
 2004-09-14  Adam Jackson  <ajax@freedesktop.org>
 
        * xcompmgr.c:
 2004-09-14  Adam Jackson  <ajax@freedesktop.org>
 
        * xcompmgr.c:
index 7e542fe..3d27786 100644 (file)
@@ -581,10 +581,30 @@ shadow_picture (Display *dpy, double opacity, Picture alpha_pict, int width, int
                                  shadowImage->width,
                                  shadowImage->height,
                                  8);
                                  shadowImage->width,
                                  shadowImage->height,
                                  8);
+    if (!shadowPixmap)
+    {
+       XDestroyImage (shadowImage);
+       return None;
+    }
+
     shadowPicture = XRenderCreatePicture (dpy, shadowPixmap,
                                          XRenderFindStandardFormat (dpy, PictStandardA8),
                                          0, 0);
     shadowPicture = XRenderCreatePicture (dpy, shadowPixmap,
                                          XRenderFindStandardFormat (dpy, PictStandardA8),
                                          0, 0);
+    if (!shadowPicture)
+    {
+       XDestroyImage (shadowImage);
+       XFreePixmap (dpy, shadowPixmap);
+       return None;
+    }
+
     gc = XCreateGC (dpy, shadowPixmap, 0, 0);
     gc = XCreateGC (dpy, shadowPixmap, 0, 0);
+    if (!gc)
+    {
+       XDestroyImage (shadowImage);
+       XFreePixmap (dpy, shadowPixmap);
+       XRenderFreePicture (dpy, shadowPicture);
+       return None;
+    }
     
     XPutImage (dpy, shadowPixmap, gc, shadowImage, 0, 0, 0, 0, 
               shadowImage->width,
     
     XPutImage (dpy, shadowPixmap, gc, shadowImage, 0, 0, 0, 0, 
               shadowImage->width,