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;
|
||||
XIClientPtr pXIClient;
|
||||
int major, minor;
|
||||
unsigned int sversion, cversion;
|
||||
|
||||
REQUEST(xXIQueryVersionReq);
|
||||
REQUEST_SIZE_MATCH(xXIQueryVersionReq);
|
||||
|
@ -71,8 +72,18 @@ ProcXIQueryVersion(ClientPtr client)
|
|||
|
||||
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
|
||||
|
||||
major = min(XIVersion.major_version, stuff->major_version);
|
||||
minor = min(XIVersion.minor_version, stuff->minor_version);
|
||||
sversion = XIVersion.major_version * 1000 + XIVersion.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->minor_version = minor;
|
||||
|
|
Loading…
Reference in New Issue