Bug #22804: Reject out of bounds XGetImage requests
authorAaron Plattner <aplattner@nvidia.com>
Wed, 22 Jul 2009 17:55:46 +0000 (10:55 -0700)
committerAaron Plattner <aplattner@nvidia.com>
Wed, 22 Jul 2009 19:52:49 +0000 (12:52 -0700)
commit587c3a2d1961834558193e8e14e8e381a077a253
treee12128bd1b51ef1324b2cb57deae04356d6edce4
parentecd618957ebf01cb4137f98efec3faed35f8a9f5
Bug #22804: Reject out of bounds XGetImage requests

The XGetImage man page states:

    If the drawable is a window, the window must be viewable, and it must be the
    case that if there were no inferiors or overlapping windows, the specified
    rectangle of the window would be fully visible on the screen and wholly
    contained within the outside edges of the window, or a BadMatch error
    results.  Note that the borders of the window can be included and read with
    this request.

However, the server was only checking the requested region against the screen
bounds, allowing XGetImage requests to read pixels outside the bounds of a
window's ancestors.  Normally, this would just read other pixels from the
screen, but if one of the ancestor windows is redirected, the window's backing
pixmap may be smaller than the window itself.

This change checks the region against the window's bounding drawable, which is
either the screen pixmap, a redirected window's backing pixmap, or the root
window for servers that don't support GetWindowPixmap.

Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
dix/dispatch.c