Make IPAddressFamily_cmp() more pleasing on the eye
authortb <tb@openbsd.org>
Tue, 28 Dec 2021 20:07:17 +0000 (20:07 +0000)
committertb <tb@openbsd.org>
Tue, 28 Dec 2021 20:07:17 +0000 (20:07 +0000)
Define and use MINIMUM() instead of a ternary operator and separate
the code from the declarations. Also, we can spare a line to make the
return legible instead of squeezing it into another ternary operator.

addressFamily->data contains a two-bytes AFI and an optional one-byte
SAFI.  This function currently also compares any trailing garbage that
may be present. Since comparison functions can't really error, this
needs to be checked bofore it is used. Such checks will be added in
subsequent commits.

ok jsing

lib/libcrypto/x509/x509_addr.c

index f0ef5b8..5f31d73 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: x509_addr.c,v 1.40 2021/12/28 19:59:33 tb Exp $ */
+/*     $OpenBSD: x509_addr.c,v 1.41 2021/12/28 20:07:17 tb Exp $ */
 /*
  * Contributed to the OpenSSL Project by the American Registry for
  * Internet Numbers ("ARIN").
@@ -1041,6 +1041,8 @@ X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
        return afi_length;
 }
 
+#define MINIMUM(a, b) (((a) < (b)) ? (a) : (b))
+
 /*
  * Sort comparison function for a sequence of IPAddressFamily.
  *
@@ -1057,9 +1059,14 @@ IPAddressFamily_cmp(const IPAddressFamily *const *a_,
 {
        const ASN1_OCTET_STRING *a = (*a_)->addressFamily;
        const ASN1_OCTET_STRING *b = (*b_)->addressFamily;
-       int len = ((a->length <= b->length) ? a->length : b->length);
-       int cmp = memcmp(a->data, b->data, len);
-       return cmp ? cmp : a->length - b->length;
+       int len, cmp;
+
+       len = MINIMUM(a->length, b->length);
+
+       if ((cmp = memcmp(a->data, b->data, len)) != 0)
+               return cmp;
+
+       return a->length - b->length;
 }
 
 /*