]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add DBC REQUIRE to check that 'text' is non NULL
authorMark Andrews <marka@isc.org>
Tue, 18 May 2021 06:37:08 +0000 (16:37 +1000)
committerMark Andrews <marka@isc.org>
Mon, 12 Jul 2021 04:55:46 +0000 (14:55 +1000)
for all control channel commands.  This should silence
gcc-10-analyzer reporting NULL pointer dereference of 'text'.

(cherry picked from commit ac0fc3c2de27a8afac632081a8a2d1a73baa7c37)

bin/named/server.c

index c7d0fc712702dd8563a9264a4b6acdd60a554b0f..9f6f395bc55f445127ecf63b3661b8d9f10feeb5 100644 (file)
@@ -10653,6 +10653,8 @@ named_server_retransfercommand(named_server_t *server, isc_lex_t *lex,
        dns_zone_t *raw = NULL;
        dns_zonetype_t type;
 
+       REQUIRE(text != NULL);
+
        result = zone_from_args(server, lex, NULL, &zone, NULL, text, true);
        if (result != ISC_R_SUCCESS) {
                return (result);
@@ -10700,6 +10702,8 @@ named_server_reloadcommand(named_server_t *server, isc_lex_t *lex,
        dns_zonetype_t type;
        const char *msg = NULL;
 
+       REQUIRE(text != NULL);
+
        result = zone_from_args(server, lex, NULL, &zone, NULL, text, true);
        if (result != ISC_R_SUCCESS) {
                return (result);
@@ -10780,6 +10784,8 @@ named_server_notifycommand(named_server_t *server, isc_lex_t *lex,
        dns_zone_t *zone = NULL;
        const char msg[] = "zone notify queued";
 
+       REQUIRE(text != NULL);
+
        result = zone_from_args(server, lex, NULL, &zone, NULL, text, true);
        if (result != ISC_R_SUCCESS) {
                return (result);
@@ -10808,6 +10814,8 @@ named_server_refreshcommand(named_server_t *server, isc_lex_t *lex,
        const char msg2[] = "not a slave, mirror, or stub zone";
        dns_zonetype_t type;
 
+       REQUIRE(text != NULL);
+
        result = zone_from_args(server, lex, NULL, &zone, NULL, text, true);
        if (result != ISC_R_SUCCESS) {
                return (result);
@@ -11243,6 +11251,8 @@ named_server_dumpdb(named_server_t *server, isc_lex_t *lex,
        const char *sep;
        bool found;
 
+       REQUIRE(text != NULL);
+
        /* Skip the command name. */
        ptr = next_token(lex, NULL);
        if (ptr == NULL) {
@@ -11366,6 +11376,8 @@ named_server_dumpsecroots(named_server_t *server, isc_lex_t *lex,
        unsigned int used = isc_buffer_usedlength(*text);
        bool first = true;
 
+       REQUIRE(text != NULL);
+
        /* Skip the command name. */
        ptr = next_token(lex, text);
        if (ptr == NULL) {
@@ -11554,6 +11566,8 @@ named_server_validation(named_server_t *server, isc_lex_t *lex,
        isc_result_t result;
        bool enable = true, set = true, first = true;
 
+       REQUIRE(text != NULL);
+
        /* Skip the command name. */
        ptr = next_token(lex, text);
        if (ptr == NULL) {
@@ -11874,6 +11888,8 @@ named_server_status(named_server_t *server, isc_buffer_t **text) {
        char line[1024], hostname[256];
        named_reload_t reload_status;
 
+       REQUIRE(text != NULL);
+
        if (named_g_server->version_set) {
                ob = " (";
                cb = ")";
@@ -12001,6 +12017,8 @@ named_server_testgen(isc_lex_t *lex, isc_buffer_t **text) {
        unsigned long i;
        const unsigned char chars[] = "abcdefghijklmnopqrstuvwxyz0123456789";
 
+       REQUIRE(text != NULL);
+
        /* Skip the command name. */
        ptr = next_token(lex, text);
        if (ptr == NULL) {
@@ -12096,6 +12114,8 @@ named_server_tsigdelete(named_server_t *server, isc_lex_t *lex,
        char target[DNS_NAME_FORMATSIZE];
        char fbuf[16];
 
+       REQUIRE(text != NULL);
+
        (void)next_token(lex, text); /* skip command name */
 
        ptr = next_token(lex, text);
@@ -12220,6 +12240,8 @@ named_server_tsiglist(named_server_t *server, isc_buffer_t **text) {
        dns_view_t *view;
        unsigned int foundkeys = 0;
 
+       REQUIRE(text != NULL);
+
        for (view = ISC_LIST_HEAD(server->viewlist); view != NULL;
             view = ISC_LIST_NEXT(view, link))
        {
@@ -12264,6 +12286,8 @@ named_server_rekey(named_server_t *server, isc_lex_t *lex,
        bool fullsign = false;
        char *ptr;
 
+       REQUIRE(text != NULL);
+
        ptr = next_token(lex, text);
        if (ptr == NULL) {
                return (ISC_R_UNEXPECTEDEND);
@@ -12273,6 +12297,8 @@ named_server_rekey(named_server_t *server, isc_lex_t *lex,
                fullsign = true;
        }
 
+       REQUIRE(text != NULL);
+
        result = zone_from_args(server, lex, NULL, &zone, NULL, text, false);
        if (result != ISC_R_SUCCESS) {
                return (result);
@@ -12345,6 +12371,8 @@ named_server_sync(named_server_t *server, isc_lex_t *lex, isc_buffer_t **text) {
        const char *vname, *sep, *arg;
        bool cleanup = false;
 
+       REQUIRE(text != NULL);
+
        (void)next_token(lex, text);
 
        arg = next_token(lex, text);
@@ -12354,6 +12382,8 @@ named_server_sync(named_server_t *server, isc_lex_t *lex, isc_buffer_t **text) {
                arg = next_token(lex, text);
        }
 
+       REQUIRE(text != NULL);
+
        result = zone_from_args(server, lex, arg, &zone, NULL, text, false);
        if (result != ISC_R_SUCCESS) {
                return (result);
@@ -12424,6 +12454,8 @@ named_server_freeze(named_server_t *server, bool freeze, isc_lex_t *lex,
        bool frozen;
        const char *msg = NULL;
 
+       REQUIRE(text != NULL);
+
        result = zone_from_args(server, lex, NULL, &mayberaw, NULL, text, true);
        if (result != ISC_R_SUCCESS) {
                return (result);
@@ -12540,6 +12572,8 @@ named_server_freeze(named_server_t *server, bool freeze, isc_lex_t *lex,
  */
 isc_result_t
 named_smf_add_message(isc_buffer_t **text) {
+       REQUIRE(text != NULL);
+
        return (putstr(text, "use svcadm(1M) to manage named"));
 }
 #endif /* HAVE_LIBSCF */
@@ -13813,6 +13847,8 @@ named_server_changezone(named_server_t *server, char *command,
        dns_fixedname_t fname;
        dns_name_t *dnsname;
 
+       REQUIRE(text != NULL);
+
        if (strncasecmp(command, "add", 3) == 0) {
                addzone = true;
        } else {
@@ -14088,6 +14124,8 @@ named_server_delzone(named_server_t *server, isc_lex_t *lex,
        isc_event_t *dzevent = NULL;
        isc_task_t *task = NULL;
 
+       REQUIRE(text != NULL);
+
        /* Skip the command name. */
        ptr = next_token(lex, text);
        if (ptr == NULL) {
@@ -14302,6 +14340,8 @@ named_server_showzone(named_server_t *server, isc_lex_t *lex,
        bool added, redirect;
        ns_dzarg_t dzarg;
 
+       REQUIRE(text != NULL);
+
        /* Parse parameters */
        CHECK(zone_from_args(server, lex, NULL, &zone, zonename, text, true));
        if (zone == NULL) {
@@ -14437,6 +14477,8 @@ named_server_signing(named_server_t *server, isc_lex_t *lex,
        const char *ptr;
        size_t n;
 
+       REQUIRE(text != NULL);
+
        dns_rdataset_init(&privset);
 
        /* Skip the command name. */
@@ -14667,6 +14709,8 @@ named_server_dnssec(named_server_t *server, isc_lex_t *lex,
        dns_db_t *db = NULL;
        dns_dbversion_t *version = NULL;
 
+       REQUIRE(text != NULL);
+
        /* Skip the command name. */
        ptr = next_token(lex, text);
        if (ptr == NULL) {
@@ -15007,6 +15051,8 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex,
        char **incfiles = NULL;
        int nfiles = 0;
 
+       REQUIRE(text != NULL);
+
        isc_time_settoepoch(&loadtime);
        isc_time_settoepoch(&refreshtime);
        isc_time_settoepoch(&expiretime);
@@ -15273,6 +15319,8 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, bool readonly,
        dns_rdataclass_t rdclass = dns_rdataclass_in;
        bool first = true;
 
+       REQUIRE(text != NULL);
+
        UNUSED(force);
 
        fname = dns_fixedname_initname(&fn);
@@ -15826,6 +15874,8 @@ named_server_mkeys(named_server_t *server, isc_lex_t *lex,
        bool found = false;
        bool first = true;
 
+       REQUIRE(text != NULL);
+
        /* Skip rndc command name */
        cmd = next_token(lex, text);
        if (cmd == NULL) {
@@ -15945,6 +15995,8 @@ named_server_dnstap(named_server_t *server, isc_lex_t *lex,
        bool reopen = false;
        int backups = 0;
 
+       REQUIRE(text != NULL);
+
        if (server->dtenv == NULL) {
                return (ISC_R_NOTFOUND);
        }
@@ -16099,6 +16151,8 @@ named_server_servestale(named_server_t *server, isc_lex_t *lex,
        isc_result_t result = ISC_R_SUCCESS;
        bool exclusive = false;
 
+       REQUIRE(text != NULL);
+
        /* Skip the command name. */
        ptr = next_token(lex, text);
        if (ptr == NULL) {