[PATCH] xace: Fix XaceCensorImage to actually censor the right part of the image
Aaron Plattner
aplattner at nvidia.com
Tue Aug 2 17:34:07 UTC 2016
The caller passes arguments into XaceCensorImage that are in window-relative
coordinates. However, the pBuf that it uses to construct a temporary pixmap has
its origin at (x, y) relative to the window in question. The code to convert the
censor region into boxes adjusts for the Y coordinate, but leaves the X
coordinate alone. The result is that if x is not zero, it censors the wrong part
of the image.
Fix this by just translating censorRegion into pixmap-relative coordinates and
using the resulting boxes as-is.
Reported-by: Fabien Lelaquais <Fabien.Lelaquais at roguewave.com>
Link: https://lists.x.org/archives/xorg/2016-August/058165.html
Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
---
Xext/xace.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Xext/xace.c b/Xext/xace.c
index 91c74d591267..a3a83a20c08a 100644
--- a/Xext/xace.c
+++ b/Xext/xace.c
@@ -245,6 +245,7 @@ XaceCensorImage(ClientPtr client,
/* censorRegion = imageRegion - visibleRegion */
RegionSubtract(&censorRegion, &imageRegion, pVisibleRegion);
+ RegionTranslate(&censorRegion, -x, -y);
nRects = RegionNumRects(&censorRegion);
if (nRects > 0) { /* we have something to censor */
GCPtr pScratchGC = NULL;
@@ -265,7 +266,7 @@ XaceCensorImage(ClientPtr client,
}
for (pBox = RegionRects(&censorRegion), i = 0; i < nRects; i++, pBox++) {
pRects[i].x = pBox->x1;
- pRects[i].y = pBox->y1 - imageBox.y1;
+ pRects[i].y = pBox->y1;
pRects[i].width = pBox->x2 - pBox->x1;
pRects[i].height = pBox->y2 - pBox->y1;
}
--
2.9.0
More information about the xorg-devel
mailing list