]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3872. [bug] Address issues found by static analysis. [RT #36209]
authorMark Andrews <marka@isc.org>
Mon, 9 Jun 2014 23:17:15 +0000 (09:17 +1000)
committerMark Andrews <marka@isc.org>
Mon, 9 Jun 2014 23:22:43 +0000 (09:22 +1000)
(cherry picked from commit b16d99bac1d100735224ab3eaa84632537ff21b5)

CHANGES
bin/named/update.c
bin/tests/dst/gsstest.c
bin/tools/genrandom.c
lib/dns/nsec3.c
lib/dns/rbt.c
lib/isc/include/isc/iterated_hash.h

diff --git a/CHANGES b/CHANGES
index f7e091164d83a2ae97c5addb7f4521597a36ce82..0f16ec9afbb2a1091f3989b79a43e173c6b28682 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+3872.  [bug]           Address issues found by static analysis. [RT #36209]
+
 3871.  [bug]           Don't publish an activated key automatically before
                        its publish time. [RT #35063]
 
index fa1136de3285024b587d12ed45725d12197c72e4..c5d3495a91c34250b0463d1c9cabbdb511457c52 100644 (file)
@@ -3069,10 +3069,9 @@ update_action(isc_task_t *task, isc_event_t *event) {
 #define ALLOW_SECURE_TO_INSECURE(zone) \
        ((dns_zone_getoptions(zone) & DNS_ZONEOPT_SECURETOINSECURE) != 0)
 
+               CHECK(rrset_exists(db, oldver, zonename, dns_rdatatype_dnskey,
+                                  0, &had_dnskey));
                if (!ALLOW_SECURE_TO_INSECURE(zone)) {
-                       CHECK(rrset_exists(db, oldver, zonename,
-                                          dns_rdatatype_dnskey, 0,
-                                          &had_dnskey));
                        if (had_dnskey && !has_dnskey) {
                                update_log(client, zone, LOGLEVEL_PROTOCOL,
                                           "update rejected: all DNSKEY "
index cb08d2bdcbdf32135280a799e823325494983e4a..65a58370923acbfc17fade129f20552b25943cde 100644 (file)
@@ -27,6 +27,7 @@
 #include <isc/entropy.h>
 #include <isc/log.h>
 #include <isc/mem.h>
+#include <isc/print.h>
 #include <isc/sockaddr.h>
 #include <isc/socket.h>
 #include <isc/task.h>
@@ -71,9 +72,6 @@ struct dst_context {
        } \
 }
 
-static char contextname[512];
-static char gssid[512];
-static char serveraddress[512];
 static dns_fixedname_t servername, gssname;
 
 static isc_mem_t *mctx;
@@ -106,7 +104,7 @@ console(isc_task_t *task, isc_event_t *event)
 
        for (;;) {
                printf("\nCommand => ");
-               c = scanf("%s", buf);
+               c = scanf("%31s", buf);
 
                if (c == EOF || strcmp(buf, "quit") == 0) {
                        isc_app_shutdown();
@@ -209,7 +207,7 @@ sendquery(isc_task_t *task, isc_event_t *event)
        isc_event_free(&event);
 
        printf("Query => ");
-       c = scanf("%s", host);
+       c = scanf("%255s", host);
        if (c == EOF)
                return;
 
@@ -350,6 +348,8 @@ initctx2(isc_task_t *task, isc_event_t *event) {
 
 static void
 initctx1(isc_task_t *task, isc_event_t *event) {
+       char gssid[512];
+       char contextname[512];
        isc_result_t result;
        isc_buffer_t buf;
        dns_message_t *query;
@@ -359,11 +359,12 @@ initctx1(isc_task_t *task, isc_event_t *event) {
        isc_event_free(&event);
 
        printf("Initctx - GSS name => ");
-       c = scanf("%s", gssid);
+       c = scanf("%511s", gssid);
        if (c == EOF)
                return;
 
-       sprintf(contextname, "gsstest.context.%d.", (int)time(NULL));
+       snprintf(contextname, sizeof(contextname),
+                "gsstest.context.%d.", (int)time(NULL));
 
        printf("Initctx - context name we're using: %s\n", contextname);
 
@@ -417,12 +418,13 @@ initctx1(isc_task_t *task, isc_event_t *event) {
 static void
 setup(void)
 {
-       struct in_addr inaddr;
-       int c;
-
        for (;;) {
+               char serveraddress[512];
+               struct in_addr inaddr;
+               int c;
+
                printf("Server IP => ");
-               c = scanf("%s", serveraddress);
+               c = scanf("%511s", serveraddress);
 
                if (c == EOF || strcmp(serveraddress, "quit") == 0) {
                        isc_app_shutdown();
index 0d7eb726d6de253a04b236ce304b85cb516b808d..a48af83b8f24deeb02d9f3f09aa1d9e1640860f1 100644 (file)
@@ -120,7 +120,9 @@ main(int argc, char **argv) {
                return (0);
        }
 
-       len = strlen(argv[isc_commandline_index]) + 2;
+       len = strlen(argv[isc_commandline_index]);
+       INSIST((len + 2) > len);
+       len += 2;
        name = (char *) malloc(len);
        if (name == NULL) {
                perror("malloc");
index e66cc5a56fad7a4473f3227c4afe0be5e1cc037c..62685f30d6b76e18efe97351089516eeff67104e 100644 (file)
@@ -567,6 +567,7 @@ dns_nsec3_addnsec3(dns_db_t *db, dns_dbversion_t *version,
        CHECK(dns_nsec3_hashname(&fixed, nexthash, &next_length,
                                 name, origin, hash, iterations,
                                 salt, salt_length));
+       INSIST(next_length <= sizeof(nexthash));
 
        /*
         * Create the node if it doesn't exist and hold
index 32ddbde999e8b4eba29d9d8fff2989abefa9d6f8..7a440274aafdcb87152c6c45987cf5adc6d37e26 100644 (file)
@@ -263,7 +263,10 @@ getdata(dns_rbtnode_t *node, file_header_t *header) {
  * of memory concerns, when chains were first implemented).
  */
 #define ADD_LEVEL(chain, node) \
-                       (chain)->levels[(chain)->level_count++] = (node)
+       do { \
+               INSIST((chain)->level_count < DNS_RBT_LEVELBLOCK); \
+               (chain)->levels[(chain)->level_count++] = (node); \
+       } while (0)
 
 /*%
  * The following macros directly access normally private name variables.
index a8173f0ab22fea86333f00f4c04d8f983ab3a9af..ba9fa93b961ea78c8d15240b8acd01ae39cade87 100644 (file)
@@ -23,7 +23,7 @@
 #include <isc/sha1.h>
 
 /*
- * The maximal hash length that can be encoded it a name
+ * The maximal hash length that can be encoded in a name
  * using base32hex.  floor(255/8)*5
  */
 #define NSEC3_MAX_HASH_LENGTH 155