mirror of
https://github.com/isc-projects/bind9.git
synced 2026-07-16 18:53:10 -04:00
Silence NULL pointer dereferene false positive
Only attempt to digest 'in' if it is non NULL. This will prevent false positives about NULL pointer dereferences against 'in' and should also speed up the processing.
This commit is contained in:
parent
94e42daa0f
commit
bf58c10dce
1 changed files with 70 additions and 68 deletions
|
|
@ -90,51 +90,52 @@ 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 == NULL)
|
||||
? NULL
|
||||
: in + inlen - (inlen % sizeof(uint64_t));
|
||||
const size_t left = inlen & 7;
|
||||
if (in != NULL && inlen != 0) {
|
||||
const uint8_t *end = in + inlen - (inlen % sizeof(uint64_t));
|
||||
const size_t left = inlen & 7;
|
||||
|
||||
for (; in != end; in += 8) {
|
||||
uint64_t m = case_sensitive
|
||||
? ISC_U8TO64_LE(in)
|
||||
: isc_ascii_tolower8(ISC_U8TO64_LE(in));
|
||||
for (; in != end; in += 8) {
|
||||
uint64_t m =
|
||||
case_sensitive
|
||||
? ISC_U8TO64_LE(in)
|
||||
: isc_ascii_tolower8(ISC_U8TO64_LE(in));
|
||||
|
||||
v3 ^= m;
|
||||
v3 ^= m;
|
||||
|
||||
for (size_t i = 0; i < cROUNDS; ++i) {
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
for (size_t i = 0; i < cROUNDS; ++i) {
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
v0 ^= m;
|
||||
}
|
||||
|
||||
v0 ^= m;
|
||||
}
|
||||
|
||||
switch (left) {
|
||||
case 7:
|
||||
b |= U8TO64_ONE(case_sensitive, in[6]) << 48;
|
||||
FALLTHROUGH;
|
||||
case 6:
|
||||
b |= U8TO64_ONE(case_sensitive, in[5]) << 40;
|
||||
FALLTHROUGH;
|
||||
case 5:
|
||||
b |= U8TO64_ONE(case_sensitive, in[4]) << 32;
|
||||
FALLTHROUGH;
|
||||
case 4:
|
||||
b |= U8TO64_ONE(case_sensitive, in[3]) << 24;
|
||||
FALLTHROUGH;
|
||||
case 3:
|
||||
b |= U8TO64_ONE(case_sensitive, in[2]) << 16;
|
||||
FALLTHROUGH;
|
||||
case 2:
|
||||
b |= U8TO64_ONE(case_sensitive, in[1]) << 8;
|
||||
FALLTHROUGH;
|
||||
case 1:
|
||||
b |= U8TO64_ONE(case_sensitive, in[0]);
|
||||
FALLTHROUGH;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
switch (left) {
|
||||
case 7:
|
||||
b |= U8TO64_ONE(case_sensitive, in[6]) << 48;
|
||||
FALLTHROUGH;
|
||||
case 6:
|
||||
b |= U8TO64_ONE(case_sensitive, in[5]) << 40;
|
||||
FALLTHROUGH;
|
||||
case 5:
|
||||
b |= U8TO64_ONE(case_sensitive, in[4]) << 32;
|
||||
FALLTHROUGH;
|
||||
case 4:
|
||||
b |= U8TO64_ONE(case_sensitive, in[3]) << 24;
|
||||
FALLTHROUGH;
|
||||
case 3:
|
||||
b |= U8TO64_ONE(case_sensitive, in[2]) << 16;
|
||||
FALLTHROUGH;
|
||||
case 2:
|
||||
b |= U8TO64_ONE(case_sensitive, in[1]) << 8;
|
||||
FALLTHROUGH;
|
||||
case 1:
|
||||
b |= U8TO64_ONE(case_sensitive, in[0]);
|
||||
FALLTHROUGH;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
v3 ^= b;
|
||||
|
|
@ -173,39 +174,40 @@ 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 == NULL)
|
||||
? NULL
|
||||
: in + inlen - (inlen % sizeof(uint32_t));
|
||||
const int left = inlen & 3;
|
||||
if (in != NULL && inlen != 0) {
|
||||
const uint8_t *end = in + inlen - (inlen % sizeof(uint32_t));
|
||||
const int left = inlen & 3;
|
||||
|
||||
for (; in != end; in += 4) {
|
||||
uint32_t m = case_sensitive
|
||||
? ISC_U8TO32_LE(in)
|
||||
: isc_ascii_tolower4(ISC_U8TO32_LE(in));
|
||||
for (; in != end; in += 4) {
|
||||
uint32_t m =
|
||||
case_sensitive
|
||||
? ISC_U8TO32_LE(in)
|
||||
: isc_ascii_tolower4(ISC_U8TO32_LE(in));
|
||||
|
||||
v3 ^= m;
|
||||
v3 ^= m;
|
||||
|
||||
for (size_t i = 0; i < cROUNDS; ++i) {
|
||||
HALFSIPROUND(v0, v1, v2, v3);
|
||||
for (size_t i = 0; i < cROUNDS; ++i) {
|
||||
HALFSIPROUND(v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
v0 ^= m;
|
||||
}
|
||||
|
||||
v0 ^= m;
|
||||
}
|
||||
|
||||
switch (left) {
|
||||
case 3:
|
||||
b |= U8TO32_ONE(case_sensitive, in[2]) << 16;
|
||||
FALLTHROUGH;
|
||||
case 2:
|
||||
b |= U8TO32_ONE(case_sensitive, in[1]) << 8;
|
||||
FALLTHROUGH;
|
||||
case 1:
|
||||
b |= U8TO32_ONE(case_sensitive, in[0]);
|
||||
FALLTHROUGH;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
switch (left) {
|
||||
case 3:
|
||||
b |= U8TO32_ONE(case_sensitive, in[2]) << 16;
|
||||
FALLTHROUGH;
|
||||
case 2:
|
||||
b |= U8TO32_ONE(case_sensitive, in[1]) << 8;
|
||||
FALLTHROUGH;
|
||||
case 1:
|
||||
b |= U8TO32_ONE(case_sensitive, in[0]);
|
||||
FALLTHROUGH;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
v3 ^= b;
|
||||
|
|
|
|||
Loading…
Reference in a new issue