mirror of
https://github.com/isc-projects/bind9.git
synced 2026-04-29 18:09:11 -04:00
Accept 'in=NULL' with 'inlen=0' in isc_{half}siphash24
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.
This commit is contained in:
parent
a14946817e
commit
349c23dbb7
1 changed files with 8 additions and 2 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue