[PATCH] Fix overflow checking extension versions

Keith Packard keithp at keithp.com
Thu May 22 18:05:39 PDT 2014


Robert Ancell <robert.ancell at canonical.com> writes:

> 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.
> ---
>  include/misc.h | 18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/include/misc.h b/include/misc.h
> index 17de710..9c2f573 100644
> --- a/include/misc.h
> +++ b/include/misc.h
> @@ -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)

I don't see any particular reason to change the signature of this
function; the rest of the rewrite should work with 16-bit ints.

>  {
> -    int a, b;

Just changing these to uint32_t and fixing the test to

        if (a > b)
                return 1;
        if (a < b)
                return -1;
        return 0;

would suffice, assuming everything is 16-bit ints.

-- 
keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 810 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20140522/bdf74881/attachment-0001.sig>


More information about the xorg-devel mailing list