Xi: fix flawed logic in XIQueryVersion return value.
The server returned the minimum of major/minor each instead of the lower of the combined major.minor version. As a result, a client reporting 3.0 and a server supporting 2.7, the return value would be 2.0 (the minimum of both). Reported-by: Rémi Cardona Reported-by: Simon Thum Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
b6c16fc7da
commit
c77f42049f
|
@ -58,6 +58,7 @@ ProcXIQueryVersion(ClientPtr client)
|
||||||
xXIQueryVersionReply rep;
|
xXIQueryVersionReply rep;
|
||||||
XIClientPtr pXIClient;
|
XIClientPtr pXIClient;
|
||||||
int major, minor;
|
int major, minor;
|
||||||
|
unsigned int sversion, cversion;
|
||||||
|
|
||||||
REQUEST(xXIQueryVersionReq);
|
REQUEST(xXIQueryVersionReq);
|
||||||
REQUEST_SIZE_MATCH(xXIQueryVersionReq);
|
REQUEST_SIZE_MATCH(xXIQueryVersionReq);
|
||||||
|
@ -71,8 +72,18 @@ ProcXIQueryVersion(ClientPtr client)
|
||||||
|
|
||||||
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
|
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
|
||||||
|
|
||||||
major = min(XIVersion.major_version, stuff->major_version);
|
sversion = XIVersion.major_version * 1000 + XIVersion.minor_version;
|
||||||
minor = min(XIVersion.minor_version, stuff->minor_version);
|
cversion = stuff->major_version * 1000 + stuff->minor_version;
|
||||||
|
|
||||||
|
if (sversion > cversion)
|
||||||
|
{
|
||||||
|
major = stuff->major_version;
|
||||||
|
minor = stuff->minor_version;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
major = XIVersion.major_version;
|
||||||
|
minor = XIVersion.minor_version;
|
||||||
|
}
|
||||||
|
|
||||||
pXIClient->major_version = major;
|
pXIClient->major_version = major;
|
||||||
pXIClient->minor_version = minor;
|
pXIClient->minor_version = minor;
|
||||||
|
|
Loading…
Reference in New Issue