shm: move shmsize verify before allocating the drawable.
Otherwise if the VERIFY_SHMSIZE macro fails we leak the drawables we allocated earlier. Noticed by coverity scan. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
047794e350
commit
3439929c51
25
Xext/shm.c
25
Xext/shm.c
|
@ -834,6 +834,19 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
|||
return BadMatch;
|
||||
}
|
||||
|
||||
if (format == ZPixmap) {
|
||||
widthBytesLine = PixmapBytePad(w, pDraw->depth);
|
||||
length = widthBytesLine * h;
|
||||
}
|
||||
else {
|
||||
widthBytesLine = PixmapBytePad(w, 1);
|
||||
lenPer = widthBytesLine * h;
|
||||
plane = ((Mask) 1) << (pDraw->depth - 1);
|
||||
length = lenPer * Ones(planemask & (plane | (plane - 1)));
|
||||
}
|
||||
|
||||
VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client);
|
||||
|
||||
drawables = calloc(PanoramiXNumScreens, sizeof(DrawablePtr));
|
||||
if (!drawables)
|
||||
return BadAlloc;
|
||||
|
@ -856,18 +869,6 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
|||
.depth = pDraw->depth
|
||||
};
|
||||
|
||||
if (format == ZPixmap) {
|
||||
widthBytesLine = PixmapBytePad(w, pDraw->depth);
|
||||
length = widthBytesLine * h;
|
||||
}
|
||||
else {
|
||||
widthBytesLine = PixmapBytePad(w, 1);
|
||||
lenPer = widthBytesLine * h;
|
||||
plane = ((Mask) 1) << (pDraw->depth - 1);
|
||||
length = lenPer * Ones(planemask & (plane | (plane - 1)));
|
||||
}
|
||||
|
||||
VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client);
|
||||
xgi.size = length;
|
||||
|
||||
if (length == 0) { /* nothing to do */
|
||||
|
|
Loading…
Reference in New Issue