On Mon, Mar 19, 2018 at 16:04:43 +0000, Emil Velikov wrote:

> From: Emil Velikov <emil.veli...@collabora.com>
> 
> As per the protocol, the server should not return version greater than
> the one supported by the client.
> 
> Add a spec quote and tweak the numbers accordingly.
> 
> Fixes: 5c5c1b77982 ("present: Add Present extension")
> Cc: Thierry Reding <tred...@nvidia.com>
> Cc: Daniel Stone <dani...@collabora.com>
> Cc: Keith Packard <kei...@keithp.com>
> Signed-off-by: Emil Velikov <emil.veli...@collabora.com>
> ---
> Analogous to the DRI3 patch here
> https://patchwork.freedesktop.org/patch/210343/
> ---
>  present/present_request.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/present/present_request.c b/present/present_request.c
> index c6afe5fa7..f52efa52b 100644
> --- a/present/present_request.c
> +++ b/present/present_request.c
> @@ -41,7 +41,19 @@ proc_present_query_version(ClientPtr client)
>      };
>  
>      REQUEST_SIZE_MATCH(xPresentQueryVersionReq);
> -    (void) stuff;
> +    /* From presentproto:
> +     *
> +     * The client sends the highest supported version to the server
> +     * and the server sends the highest version it supports, but no
> +     * higher than the requested version.
> +     */
> +
> +    if (rep.majorVersion > stuff->majorVersion ||
> +        rep.minorVersion > stuff->minorVersion) {
> +        rep.majorVersion = stuff->majorVersion;
> +        rep.minorVersion = stuff->minorVersion;
> +    }

Doesn't this break when e.g. client supports 2.2 and server supports
1.4, where we'll return 2.2 instead of 1.4?  i.e. it seems to me this
should be

if (rep.majorVersion > stuff->majorVersion ||
    (rep.majorVersion == stuff->majorVersion &&
     rep.minorVersion > stuff->minorVersion)) {
     ...
}

Cheers,
Julien

> +
>      if (client->swapped) {
>          swaps(&rep.sequenceNumber);
>          swapl(&rep.length);
> -- 
> 2.16.0
> 
> _______________________________________________
> xorg-devel@lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to