diff --git a/lib/isc/siphash.c b/lib/isc/siphash.c index 179e9f31a8..46bd5de70a 100644 --- a/lib/isc/siphash.c +++ b/lib/isc/siphash.c @@ -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) {