From ff4952896ec4383a107bbe94001ca0a64ff47433 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 8 Jul 2016 20:56:38 +0100 Subject: [PATCH] Fix DTLS_VERSION_xx() comparison macros for DTLS1_BAD_VER DTLS version numbers are strange and backwards, except DTLS1_BAD_VER so we have to make a special case for it. This does leave us with a set of macros which will evaluate their arguments more than once, but it's not a public-facing API and it's not like this is the kind of thing where people will be using DTLS_VERSION_LE(x++, y) anyway. Reviewed-by: Rich Salz Reviewed-by: Matt Caswell --- ssl/ssl_locl.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h index 25cd312c95..550c4d5ef8 100644 --- a/ssl/ssl_locl.h +++ b/ssl/ssl_locl.h @@ -154,10 +154,13 @@ (c)[1]=(unsigned char)(((l)>> 8)&0xff), \ (c)[2]=(unsigned char)(((l) )&0xff)),(c)+=3) -#define DTLS_VERSION_GT(v1, v2) ((v1) < (v2)) -#define DTLS_VERSION_GE(v1, v2) ((v1) <= (v2)) -#define DTLS_VERSION_LT(v1, v2) ((v1) > (v2)) -#define DTLS_VERSION_LE(v1, v2) ((v1) >= (v2)) +/* DTLS version numbers are strange because they're inverted. Except + * for DTLS1_BAD_VER, which should be considered "lower" than the rest. */ +#define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1)) +#define DTLS_VERSION_GT(v1, v2) (dtls_ver_ordinal(v1) < dtls_ver_ordinal(v2)) +#define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2)) +#define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2)) +#define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2)) /* LOCAL STUFF */ -- 2.34.1