Xnest: Implement xnestModifyPixmapHeader
Xnest variant of ModifyPixmapHeader that creates new Pixmap in parent X server if it's size is modified from 0x0 to anything bigger. xnestCreatePixmap doesn't create pixmap in parent X server if it has dimensions 0x0. If it is later resized and accessed, Xnest will be aborted with BadDrawable error from parent X server because it will use XID 0. This happens with ScratchPixmap, for example as used from XaceCensorImage. Applications using XACE crash Xnest. Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
132507eba9
commit
b902c8abb6
|
@ -78,6 +78,21 @@ xnestDestroyPixmap(PixmapPtr pPixmap)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
Bool
|
||||
xnestModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
|
||||
int bitsPerPixel, int devKind, pointer pPixData)
|
||||
{
|
||||
if(!xnestPixmapPriv(pPixmap)->pixmap && width > 0 && height > 0) {
|
||||
xnestPixmapPriv(pPixmap)->pixmap =
|
||||
XCreatePixmap(xnestDisplay,
|
||||
xnestDefaultWindows[pPixmap->drawable.pScreen->myNum],
|
||||
width, height, depth);
|
||||
}
|
||||
|
||||
return miModifyPixmapHeader(pPixmap, width, height, depth,
|
||||
bitsPerPixel, devKind, pPixData);
|
||||
}
|
||||
|
||||
RegionPtr
|
||||
xnestPixmapToRegion(PixmapPtr pPixmap)
|
||||
{
|
||||
|
|
|
@ -282,6 +282,7 @@ xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[])
|
|||
|
||||
pScreen->CreatePixmap = xnestCreatePixmap;
|
||||
pScreen->DestroyPixmap = xnestDestroyPixmap;
|
||||
pScreen->ModifyPixmapHeader = xnestModifyPixmapHeader;
|
||||
|
||||
/* Font procedures */
|
||||
|
||||
|
|
|
@ -33,6 +33,8 @@ typedef struct {
|
|||
PixmapPtr xnestCreatePixmap(ScreenPtr pScreen, int width, int height,
|
||||
int depth, unsigned usage_hint);
|
||||
Bool xnestDestroyPixmap(PixmapPtr pPixmap);
|
||||
Bool xnestModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
|
||||
int bitsPerPixel, int devKind, pointer pPixData);
|
||||
RegionPtr xnestPixmapToRegion(PixmapPtr pPixmap);
|
||||
|
||||
#endif /* XNESTPIXMAP_H */
|
||||
|
|
Loading…
Reference in New Issue
Block a user