]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Accept 'in=NULL' with 'inlen=0' in isc_{half}siphash24
authorMark Andrews <marka@isc.org>
Tue, 10 Jan 2023 02:51:49 +0000 (13:51 +1100)
committerMark Andrews <marka@isc.org>
Tue, 10 Jan 2023 06:52:56 +0000 (17:52 +1100)
Arthimetic on NULL pointers is undefined.  Avoid arithmetic operations
when 'in' is NULL and require 'in' to be non-NULL if 'inlen' is not zero.

lib/isc/siphash.c

index 179e9f31a8f2eb4c9084e22deabca34ccb35c108..46bd5de70aa56c3847efa05c0aa976bdf770a3d9 100644 (file)
@@ -78,6 +78,7 @@ isc_siphash24(const uint8_t *k, const uint8_t *in, const size_t inlen,
              bool case_sensitive, uint8_t *out) {
        REQUIRE(k != NULL);
        REQUIRE(out != NULL);
+       REQUIRE(inlen == 0 || in != NULL);
 
        uint64_t k0 = ISC_U8TO64_LE(k);
        uint64_t k1 = ISC_U8TO64_LE(k + 8);
@@ -89,7 +90,9 @@ isc_siphash24(const uint8_t *k, const uint8_t *in, const size_t inlen,
 
        uint64_t b = ((uint64_t)inlen) << 56;
 
-       const uint8_t *end = in + inlen - (inlen % sizeof(uint64_t));
+       const uint8_t *end = (in == NULL)
+                                    ? NULL
+                                    : in + inlen - (inlen % sizeof(uint64_t));
        const size_t left = inlen & 7;
 
        for (; in != end; in += 8) {
@@ -158,6 +161,7 @@ isc_halfsiphash24(const uint8_t *k, const uint8_t *in, const size_t inlen,
                  bool case_sensitive, uint8_t *out) {
        REQUIRE(k != NULL);
        REQUIRE(out != NULL);
+       REQUIRE(inlen == 0 || in != NULL);
 
        uint32_t k0 = ISC_U8TO32_LE(k);
        uint32_t k1 = ISC_U8TO32_LE(k + 4);
@@ -169,7 +173,9 @@ isc_halfsiphash24(const uint8_t *k, const uint8_t *in, const size_t inlen,
 
        uint32_t b = ((uint32_t)inlen) << 24;
 
-       const uint8_t *end = in + inlen - (inlen % sizeof(uint32_t));
+       const uint8_t *end = (in == NULL)
+                                    ? NULL
+                                    : in + inlen - (inlen % sizeof(uint32_t));
        const int left = inlen & 3;
 
        for (; in != end; in += 4) {