(tgt_ip->w[3] >> 8) & 0xffU,
(tgt_ip->w[3] >> 16) & 0xffU,
(tgt_ip->w[3] >> 24) & 0xffU);
- if (len < 0 || len > (int)sizeof(str)) {
+ if (len < 0 || (size_t)len >= sizeof(str)) {
return (ISC_R_FAILURE);
}
} else {
len = snprintf(str, sizeof(str), "%d", tgt_prefix);
- if (len == -1) {
+ if (len < 0 || (size_t)len >= sizeof(str)) {
return (ISC_R_FAILURE);
}
}
for (n = 0; n <= 7; ++n) {
- INSIST(len < (int)sizeof(str));
+ INSIST(len > 0 && (size_t)len < sizeof(str));
if (n == best_first) {
- len += snprintf(str + len, sizeof(str) - len,
- ".zz");
+ i = snprintf(str + len, sizeof(str) - len,
+ ".zz");
n += best_len - 1;
} else {
- len += snprintf(str + len, sizeof(str) - len,
- ".%x", w[n]);
+ i = snprintf(str + len, sizeof(str) - len,
+ ".%x", w[n]);
}
+ if (i < 0 || (size_t)i >= (size_t)(sizeof(str) - len)) {
+ return (ISC_R_FAILURE);
+ }
+ len += i;
}
}