diff -urN xc-HEAD.orig/programs/Xserver/dix/colormap.c xc-HEAD/programs/Xserver/dix/colormap.c --- xc-HEAD.orig/programs/Xserver/dix/colormap.c 2005-08-17 11:55:31.000000000 +1000 +++ xc-HEAD/programs/Xserver/dix/colormap.c 2005-09-05 16:05:55.000000000 +1000 @@ -398,9 +398,8 @@ pmap->devPrivates = NULL; else { - pmap->devPrivates = (DevUnion *) xalloc ( - colormapPrivateCount * sizeof(DevUnion)); - + pmap->devPrivates = (DevUnion *) xcalloc ( + sizeof(DevUnion), colormapPrivateCount); if (!pmap->devPrivates) { FreeResource (mid, RT_NONE); diff -urN xc-HEAD.orig/programs/Xserver/dix/privates.c xc-HEAD/programs/Xserver/dix/privates.c --- xc-HEAD.orig/programs/Xserver/dix/privates.c 2005-08-17 11:55:32.000000000 +1000 +++ xc-HEAD/programs/Xserver/dix/privates.c 2005-09-05 16:04:36.000000000 +1000 @@ -347,10 +347,13 @@ { privs = (DevUnion *) xrealloc (pColormap->devPrivates, colormapPrivateCount * sizeof(DevUnion)); - + if (!privs) { + colormapPrivateCount--; + return -1; + } + bzero(&privs[index], sizeof(DevUnion)); pColormap->devPrivates = privs; - - if (!privs || !(*initPrivFunc)(pColormap,index)) + if (!(*initPrivFunc)(pColormap,index)) { colormapPrivateCount--; return -1;