]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix a number of warnings reported by the gcc analyzer.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 18 Jun 2021 16:12:26 +0000 (18:12 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 18 Jun 2021 16:12:26 +0000 (18:12 +0200)
doc/Changelog
iterator/iter_utils.c
pythonmod/interface.i
pythonmod/pythonmod.c
services/authzone.c
services/cache/infra.c
util/data/msgreply.c
util/shm_side/shm_main.c
validator/val_nsec.c

index 3e12c6433fcc8bfef43e7a246d969fd7325cb0fb..e350b8b3f572c83ebbfe790c64521f8a485f3911 100644 (file)
@@ -1,3 +1,6 @@
+18 June 2021: Wouter
+       - Fix a number of warnings reported by the gcc analyzer.
+
 15 June 2021: George
        - Merge #440 by kimheino: Various fixes to contrib/unbound_munin_ file.
 
index adc611f73947149d990e80a4c1920d5efa6b167d..668f898eb0ff71aacef1481b431d40dc14de8725 100644 (file)
@@ -440,6 +440,7 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env,
                prev = NULL;
                a = dp->result_list;
                for(i = 0; i < got_num; i++) {
+                       if(!a) break; /* robustness */
                        swap_to_front = 0;
                        if(a->addr.ss_family != AF_INET6 && attempt == -1) {
                                /* if we only have ip4 at low attempt count,
@@ -497,6 +498,7 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env,
                prev = NULL;
                a = dp->result_list;
                for(i = 0; i < got_num; i++) {
+                       if(!a) break; /* robustness */
                        swap_to_front = 0;
                        if(a->addr.ss_family != AF_INET && attempt == -1) {
                                /* if we only have ip6 at low attempt count,
index 5dae04aa404b26d3bec623b10697af587ed04434..ce7dcde7173cf7d99f031bf9ff1000de501759d5 100644 (file)
@@ -1546,7 +1546,7 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
     {
         PyObject *func, *py_edns, *py_qstate, *py_opt_list_out, *py_qinfo;
         PyObject *py_rep, *py_repinfo, *py_region;
-        PyObject *py_args, *py_kwargs, *result;
+        PyObject *py_args = NULL, *py_kwargs = NULL, *result = NULL;
         int res = 0;
         double py_start_time = ((double)start_time->tv_sec) + ((double)start_time->tv_usec) / 1.0e6;
 
@@ -1561,11 +1561,20 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
         py_rep = SWIG_NewPointerObj((void*) rep, SWIGTYPE_p_reply_info, 0);
         py_repinfo = SWIG_NewPointerObj((void*) repinfo, SWIGTYPE_p_comm_reply, 0);
         py_region = SWIG_NewPointerObj((void*) region, SWIGTYPE_p_regional, 0);
-        py_args = Py_BuildValue("(OOOiOOO)", py_qinfo, py_qstate, py_rep,
-            rcode, py_edns, py_opt_list_out, py_region);
-        py_kwargs = Py_BuildValue("{s:O,s:d}", "repinfo", py_repinfo, "start_time",
-                                  py_start_time);
-        result = PyObject_Call(func, py_args, py_kwargs);
+        if(py_qinfo && py_qstate && py_rep && py_edns && py_opt_list_out
+                && py_region && py_repinfo) {
+                py_args = Py_BuildValue("(OOOiOOO)", py_qinfo, py_qstate, py_rep,
+                        rcode, py_edns, py_opt_list_out, py_region);
+                py_kwargs = Py_BuildValue("{s:O,s:d}", "repinfo", py_repinfo, "start_time",
+                          py_start_time);
+                if(py_args && py_kwargs) {
+                        result = PyObject_Call(func, py_args, py_kwargs);
+                } else {
+                        log_err("pythonmod: malloc failure in python_inplace_cb_reply_generic");
+                }
+        } else {
+                log_err("pythonmod: malloc failure in python_inplace_cb_reply_generic");
+        }
         Py_XDECREF(py_edns);
         Py_XDECREF(py_qstate);
         Py_XDECREF(py_opt_list_out);
@@ -1624,6 +1633,7 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
     {
         int res = 0;
         PyObject *func = python_callback;
+        PyObject *py_args = NULL, *py_kwargs = NULL, *result = NULL;
 
         PyGILState_STATE gstate = PyGILState_Ensure();
 
@@ -1632,12 +1642,19 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
         PyObject *py_addr = SWIG_NewPointerObj((void *) addr, SWIGTYPE_p_sockaddr_storage, 0);
         PyObject *py_zone = PyBytes_FromStringAndSize((const char *)zone, zonelen);
         PyObject *py_region = SWIG_NewPointerObj((void*) region, SWIGTYPE_p_regional, 0);
-
-        PyObject *py_args = Py_BuildValue("(OiOOOO)", py_qinfo, flags, py_qstate, py_addr, py_zone, py_region);
-        PyObject *py_kwargs = Py_BuildValue("{}");
-        PyObject *result = PyObject_Call(func, py_args, py_kwargs);
-        if (result) {
-            res = PyInt_AsLong(result);
+        if(py_qinfo && py_qstate && py_addr && py_zone && py_region) {
+                py_args = Py_BuildValue("(OiOOOO)", py_qinfo, flags, py_qstate, py_addr, py_zone, py_region);
+                py_kwargs = Py_BuildValue("{}");
+                if(py_args && py_kwargs) {
+                        result = PyObject_Call(func, py_args, py_kwargs);
+                        if (result) {
+                            res = PyInt_AsLong(result);
+                        }
+                } else {
+                        log_err("pythonmod: malloc failure in python_inplace_cb_query_generic");
+                }
+        } else {
+                log_err("pythonmod: malloc failure in python_inplace_cb_query_generic");
         }
 
         Py_XDECREF(py_qinfo);
index 6e60d02fe4ac6700b35b77d10c7178201d2fa6fe..0bbdeeb6bf99e8cfa0849b451c45ebe24819b1d6 100644 (file)
@@ -561,9 +561,19 @@ void pythonmod_operate(struct module_qstate* qstate, enum module_ev event,
    {
       /* create qstate */
       pq = qstate->minfo[id] = malloc(sizeof(struct pythonmod_qstate));
+      if(!pq) {
+               log_err("pythonmod_operate: malloc failure for qstate");
+               PyGILState_Release(gil);
+               return;
+      }
 
       /* Initialize per query data */
       pq->data = PyDict_New();
+      if(!pq->data) {
+               log_err("pythonmod_operate: malloc failure for query data dict");
+               PyGILState_Release(gil);
+               return;
+      }
    }
 
    /* Call operate */
index 9ebd79ed39cd988833cd98dc70e20e24dacb22bf..0f9879ce79deecafd7f67149bb9c912096afb040 100644 (file)
@@ -7168,12 +7168,14 @@ xfer_set_masters(struct auth_master** list, struct config_auth* c,
        if(with_http)
          for(p = c->urls; p; p = p->next) {
                m = auth_master_new(&list);
+               if(!m) return 0;
                m->http = 1;
                if(!parse_url(p->str, &m->host, &m->file, &m->port, &m->ssl))
                        return 0;
        }
        for(p = c->masters; p; p = p->next) {
                m = auth_master_new(&list);
+               if(!m) return 0;
                m->ixfr = 1; /* this flag is not configurable */
                m->host = strdup(p->str);
                if(!m->host) {
@@ -7183,6 +7185,7 @@ xfer_set_masters(struct auth_master** list, struct config_auth* c,
        }
        for(p = c->allow_notify; p; p = p->next) {
                m = auth_master_new(&list);
+               if(!m) return 0;
                m->allow_notify = 1;
                m->host = strdup(p->str);
                if(!m->host) {
index 2d16bcd6e405638198879eec60f03065d1c02cc1..518e69622f830d01c3afcbac21f063aad049aa4d 100644 (file)
@@ -236,6 +236,9 @@ infra_create(struct config_file* cfg)
                sizeof(struct infra_cache));
        size_t maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+
                sizeof(struct infra_data)+INFRA_BYTES_NAME);
+       if(!infra) {
+               return NULL;
+       }
        infra->hosts = slabhash_create(cfg->infra_cache_slabs,
                INFRA_HOST_STARTSIZE, maxmem, &infra_sizefunc, &infra_compfunc,
                &infra_delkeyfunc, &infra_deldatafunc, NULL);
index 48550cbe4f387305c1a240d9526c5da9033add80..00272fd1c64ec8d234e35d0a353f52ad06f4b49a 100644 (file)
@@ -329,7 +329,10 @@ parse_create_rrset(sldns_buffer* pkt, struct rrset_parse* pset,
                return 0;
        /* copy & decompress */
        if(!parse_rr_copy(pkt, pset, *data)) {
-               if(!region) free(*data);
+               if(!region) {
+                       free(*data);
+                       *data = NULL;
+               }
                return 0;
        }
        return 1;
@@ -394,8 +397,13 @@ parse_copy_decompress_rrset(sldns_buffer* pkt, struct msg_parse* msg,
        pk->rk.type = htons(pset->type);
        pk->rk.rrset_class = pset->rrset_class;
        /** read data part. */
-       if(!parse_create_rrset(pkt, pset, &data, region))
+       if(!parse_create_rrset(pkt, pset, &data, region)) {
+               if(!region) {
+                       free(pk->rk.dname);
+                       pk->rk.dname = NULL;
+               }
                return 0;
+       }
        pk->entry.data = (void*)data;
        pk->entry.key = (void*)pk;
        pk->entry.hash = pset->hash;
index af8c5bcf3705e8204937388d41e427b058f59ad8..51039abf3ed8aab35f9e5bdb03baaa5b538dd129 100644 (file)
@@ -130,6 +130,7 @@ int shm_main_init(struct daemon* daemon)
 
                /* Just release memory unused */
                free(daemon->shm_info);
+               daemon->shm_info = NULL;
 
                return 0;
        }
@@ -143,6 +144,7 @@ int shm_main_init(struct daemon* daemon)
 
                /* Just release memory unused */
                free(daemon->shm_info);
+               daemon->shm_info = NULL;
 
                return 0;
        }
@@ -156,6 +158,7 @@ int shm_main_init(struct daemon* daemon)
 
                /* Just release memory unused */
                free(daemon->shm_info);
+               daemon->shm_info = NULL;
 
                return 0;
        }
@@ -170,6 +173,7 @@ int shm_main_init(struct daemon* daemon)
 
                /* Just release memory unused */
                free(daemon->shm_info);
+               daemon->shm_info = NULL;
 
                return 0;
        }
@@ -210,6 +214,8 @@ void shm_main_shutdown(struct daemon* daemon)
        if (daemon->shm_info->ptr_arr)
                shmdt(daemon->shm_info->ptr_arr);
 
+       free(daemon->shm_info);
+       daemon->shm_info = NULL;
 #else
        (void)daemon;
 #endif /* HAVE_SHMGET */
index 032d2ae03a428748ed4b0014390675a1368207d6..a4e5b3137dbf7c819d4c0aa940b34812e09c0781 100644 (file)
@@ -180,6 +180,7 @@ nsec_verify_rrset(struct module_env* env, struct val_env* ve,
 {
        struct packed_rrset_data* d = (struct packed_rrset_data*)
                nsec->entry.data;
+       if(!d) return 0;
        if(d->security == sec_status_secure)
                return 1;
        rrset_check_sec_status(env->rrset_cache, nsec, *env->now);