[PATCH xserver 2/2] randr: Use RRCrtcGetScanoutSize() in ProcRRSetScreenSize()
Michel Dänzer
michel at daenzer.net
Tue Jan 9 11:03:52 UTC 2018
On 2018-01-09 03:44 AM, Alex Goins wrote:
> Previously, ProcRRSetScreenSize() manually computed the dimensions of a CRTC's
> viewport in order to check that it does not extend beyond the bounds of the new
> screen size. It did this incorrectly, leading to bugs.
>
> A previous patch "randr: Fix rotation check in ProcRRSetScreenSize()" fixed the
> issue by directly correcting the calculation, but to avoid future bugs of this
> class, this patch uses RRCrtcGetScanoutSize() to do the calculation, implicitly
> accounting for all possible transforms.
>
> There is existing precedent for this method in ProcRRSetCrtcConfig(), where
> RRModeGetScanoutSize() is used directly due to the transform having not yet been
> applied but the check is otherwise the same.
>
> Signed-off-by: Alex Goins <agoins at nvidia.com>
> ---
> randr/rrscreen.c | 13 ++++---------
> 1 file changed, 4 insertions(+), 9 deletions(-)
>
> diff --git a/randr/rrscreen.c b/randr/rrscreen.c
> index f484383..7321eef 100644
> --- a/randr/rrscreen.c
> +++ b/randr/rrscreen.c
> @@ -265,17 +265,12 @@ ProcRRSetScreenSize(ClientPtr client)
> }
> for (i = 0; i < pScrPriv->numCrtcs; i++) {
> RRCrtcPtr crtc = pScrPriv->crtcs[i];
> - RRModePtr mode = crtc->mode;
>
> - if (mode) {
> - int source_width = mode->mode.width;
> - int source_height = mode->mode.height;
> - Rotation rotation = crtc->rotation;
> + if (crtc->mode) {
> + int source_width;
> + int source_height;
>
> - if (rotation & (RR_Rotate_90 | RR_Rotate_270)) {
> - source_width = mode->mode.height;
> - source_height = mode->mode.width;
> - }
> + RRCrtcGetScanoutSize(crtc, &source_width, &source_height);
>
> if (crtc->x + source_width > stuff->width ||
> crtc->y + source_height > stuff->height)
>
Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
Is there any reason to have patch 1 separately?
P.S. Looks like there are similar issues in randr/rrcrtc.c, in
crtc_to_box and rrCheckPixmapBounding.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the xorg-devel
mailing list