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
|
||||
*/
|
||||
static inline int
|
||||
version_compare(uint16_t a_major, uint16_t a_minor,
|
||||
uint16_t b_major, uint16_t b_minor)
|
||||
version_compare(uint32_t a_major, uint32_t a_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;
|
||||
b = b_major << 16 | b_minor;
|
||||
|
||||
return (a - b);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* some macros to help swap requests, replies, and events */
|
||||
|
|
Loading…
Reference in New Issue
Block a user