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:
Peter Hutterer 2009-06-05 09:29:04 +10:00
parent b6c16fc7da
commit c77f42049f

View File

@ -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;