diff options
author | Emil Velikov <emil.velikov@collabora.com> | 2018-03-13 18:38:49 +0000 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2018-03-19 15:49:36 -0400 |
commit | ae5c0dd199a5fbfbdf7a2d6b8c1b28c410289106 (patch) | |
tree | 4fd1cc1652e57716d042bfc13387b523b9d8fcc0 /dri3 | |
parent | 6a5d51e0823b43280e3646b7a0c919a3b76146ea (diff) |
dri3: cap the version returned to the client
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: 563138298868 ("dri3: Add DRI3 extension")
Cc: Daniel Stone <daniels@collabora.com>
Cc: Keith Packard <keithp@keithp.com>
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'dri3')
-rw-r--r-- | dri3/dri3_request.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/dri3/dri3_request.c b/dri3/dri3_request.c index 7f3f0d08c..fc258711b 100644 --- a/dri3/dri3_request.c +++ b/dri3/dri3_request.c @@ -45,7 +45,19 @@ proc_dri3_query_version(ClientPtr client) }; REQUEST_SIZE_MATCH(xDRI3QueryVersionReq); - (void) stuff; + /* From DRI3 proto: + * + * 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; + } + if (client->swapped) { swaps(&rep.sequenceNumber); swapl(&rep.length); |