]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
silence a warning about unsafe snprintf() call
authorEvan Hunt <each@isc.org>
Tue, 10 Mar 2020 03:51:21 +0000 (20:51 -0700)
committerEvan Hunt <each@isc.org>
Tue, 17 Mar 2020 20:28:15 +0000 (13:28 -0700)
lib/dns/rpz.c

index d194a169e0fb5b4eeb00ffb24e1383464f09f373..a2f2e4b7ea53aeccb1ec668d8bc8e0b1f672b1bc 100644 (file)
@@ -713,12 +713,12 @@ ip2name(const dns_rpz_cidr_key_t *tgt_ip, dns_rpz_prefix_t tgt_prefix,
                               (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);
                }
 
@@ -753,15 +753,19 @@ ip2name(const dns_rpz_cidr_key_t *tgt_ip, dns_rpz_prefix_t tgt_prefix,
                }
 
                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");
+                               = snprintf(str + len, sizeof(str) - len,
+                                            ".zz");
                                n += best_len - 1;
                        } else {
-                               len += snprintf(str + len, sizeof(str) - len,
-                                               ".%x", w[n]);
+                               = 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;
                }
        }