Fix overflow checking extension versions
The easiest way to check for the version of an extension is to send the maximum possible version numbers in the QueryVersion request. The X server overflows on these as it assumes you will send a reasonable version number. Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
4cbd3fabaa
commit
0df871cf34
|
@ -259,15 +259,19 @@ extern void FormatDouble(double dbl, char *string);
|
||||||
* or a value greater than 0
|
* or a value greater than 0
|
||||||
*/
|
*/
|
||||||
static inline int
|
static inline int
|
||||||
version_compare(uint16_t a_major, uint16_t a_minor,
|
version_compare(uint32_t a_major, uint32_t a_minor,
|
||||||
uint16_t b_major, uint16_t b_minor)
|
uint32_t b_major, uint32_t b_minor)
|
||||||
{
|
{
|
||||||
int a, b;
|
if (a_major > b_major)
|
||||||
|
return 1;
|
||||||
|
if (a_major < b_major)
|
||||||
|
return -1;
|
||||||
|
if (a_minor > b_minor)
|
||||||
|
return 1;
|
||||||
|
if (a_minor < b_minor)
|
||||||
|
return -1;
|
||||||
|
|
||||||
a = a_major << 16 | a_minor;
|
return 0;
|
||||||
b = b_major << 16 | b_minor;
|
|
||||||
|
|
||||||
return (a - b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* some macros to help swap requests, replies, and events */
|
/* some macros to help swap requests, replies, and events */
|
||||||
|
|
Loading…
Reference in New Issue