Xi: Clamp XIClient maximal version to XIVersion
Do not allow setting client version to an arbitrary value >= XIVersion.
Fixes a test error with test/xi2/protocol-xiqueryversion.c, introduced by
commit 4360514d1c
"Xi: Allow clients to ask for 2.3 and then 2.2 without failing"
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
e1ab8f239b
commit
500e844a24
|
@ -70,12 +70,21 @@ ProcXIQueryVersion(ClientPtr client)
|
||||||
|
|
||||||
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
|
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
|
||||||
|
|
||||||
|
if (version_compare(XIVersion.major_version, XIVersion.minor_version,
|
||||||
|
stuff->major_version, stuff->minor_version) > 0) {
|
||||||
|
major = stuff->major_version;
|
||||||
|
minor = stuff->minor_version;
|
||||||
|
} else {
|
||||||
|
major = XIVersion.major_version;
|
||||||
|
minor = XIVersion.minor_version;
|
||||||
|
}
|
||||||
|
|
||||||
if (pXIClient->major_version) {
|
if (pXIClient->major_version) {
|
||||||
|
|
||||||
/* Check to see if the client has only ever asked
|
/* Check to see if the client has only ever asked
|
||||||
* for version 2.2 or higher
|
* for version 2.2 or higher
|
||||||
*/
|
*/
|
||||||
if (version_compare(stuff->major_version, stuff->minor_version, 2, 2) >= 0 &&
|
if (version_compare(major, minor, 2, 2) >= 0 &&
|
||||||
version_compare(pXIClient->major_version, pXIClient->minor_version, 2, 2) >= 0)
|
version_compare(pXIClient->major_version, pXIClient->minor_version, 2, 2) >= 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -84,16 +93,14 @@ ProcXIQueryVersion(ClientPtr client)
|
||||||
* version to the client but leave the server internal
|
* version to the client but leave the server internal
|
||||||
* version set to the highest requested value
|
* version set to the highest requested value
|
||||||
*/
|
*/
|
||||||
major = stuff->major_version;
|
if (version_compare(major, minor,
|
||||||
minor = stuff->minor_version;
|
|
||||||
if (version_compare(stuff->major_version, stuff->minor_version,
|
|
||||||
pXIClient->major_version, pXIClient->minor_version) > 0)
|
pXIClient->major_version, pXIClient->minor_version) > 0)
|
||||||
{
|
{
|
||||||
pXIClient->major_version = stuff->major_version;
|
pXIClient->major_version = major;
|
||||||
pXIClient->minor_version = stuff->minor_version;
|
pXIClient->minor_version = minor;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (version_compare(stuff->major_version, stuff->minor_version,
|
if (version_compare(major, minor,
|
||||||
pXIClient->major_version, pXIClient->minor_version) < 0) {
|
pXIClient->major_version, pXIClient->minor_version) < 0) {
|
||||||
|
|
||||||
client->errorValue = stuff->major_version;
|
client->errorValue = stuff->major_version;
|
||||||
|
@ -103,16 +110,6 @@ ProcXIQueryVersion(ClientPtr client)
|
||||||
minor = pXIClient->minor_version;
|
minor = pXIClient->minor_version;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (version_compare(XIVersion.major_version, XIVersion.minor_version,
|
|
||||||
stuff->major_version, stuff->minor_version) > 0) {
|
|
||||||
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