summaryrefslogtreecommitdiff
path: root/dri3
diff options
context:
space:
mode:
authorEmil Velikov <emil.velikov@collabora.com>2018-03-13 18:38:49 +0000
committerAdam Jackson <ajax@redhat.com>2018-03-19 15:49:36 -0400
commitae5c0dd199a5fbfbdf7a2d6b8c1b28c410289106 (patch)
tree4fd1cc1652e57716d042bfc13387b523b9d8fcc0 /dri3
parent6a5d51e0823b43280e3646b7a0c919a3b76146ea (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.c14
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);