]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] check malloc/calloc return values
authorEvan Hunt <each@isc.org>
Fri, 7 Dec 2012 20:23:58 +0000 (12:23 -0800)
committerEvan Hunt <each@isc.org>
Fri, 7 Dec 2012 20:23:58 +0000 (12:23 -0800)
3436. [bug] Check malloc/calloc return values. [RT #32088]

CHANGES
lib/dns/gen.c
lib/dns/spnego.c
lib/dns/spnego_asn1.c
lib/lwres/getipnode.c

diff --git a/CHANGES b/CHANGES
index 7e3073e43dd362cb724340b7b36cb0a380d58813..b2432938a6ebbea9c04fba054c92f3a8ad14c4b9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+3436.  [bug]           Check malloc/calloc return values. [RT #32088]
+
 3435.  [bug]           Cross compilation support in configure was broken.
                        [RT #32078]
 
index 6eb325ed66536fee57ffb325f94ad07977ba54c5..ce8cfe0437eec3c3164624287332c7d928879ed7 100644 (file)
@@ -430,6 +430,10 @@ add(int rdclass, const char *classname, int type, const char *typename,
                return;
 
        newcc = (struct cc *)malloc(sizeof(*newcc));
+       if (newcc == NULL) {
+               fprintf(stderr, "malloc() failed\n");
+               exit(1);
+       }
        newcc->rdclass = rdclass;
        strncpy(newcc->classname, classname, TYPECLASSLEN);
        cc = classes;
index 4136cbb020fb2662305b1f79f730b236625b1d78..601511b5578b83a02200e75c98a9a1642ae4a0e8 100644 (file)
@@ -1553,6 +1553,11 @@ spnego_initial(OM_uint32 *minor_status,
 
        buf_size = 1024;
        buf = malloc(buf_size);
+       if (buf == NULL) {
+               *minor_status = ENOMEM;
+               ret = GSS_S_FAILURE;
+               goto end;
+       }
 
        do {
                ret = encode_NegTokenInit(buf + buf_size - 1,
index 75c2304d8e2c62398863e935268e5480eddff5ff..efc4b0c30efddc06f02d823eae8a9056eeee0b59 100644 (file)
@@ -269,8 +269,14 @@ decode_MechTypeList(const unsigned char *p, size_t len, MechTypeList * data, siz
                (data)->len = 0;
                (data)->val = NULL;
                while (ret < origlen) {
+                       void *old = (data)->val;
                        (data)->len++;
                        (data)->val = realloc((data)->val, sizeof(*((data)->val)) * (data)->len);
+                       if ((data)->val == NULL) {
+                               (data)->val = old;
+                               (data)->len--;
+                               return ENOMEM;
+                       }
                        e = decode_MechType(p, len, &(data)->val[(data)->len - 1], &l);
                        FORW;
                        len = origlen - ret;
index da00e8c8713a4a50f4e32876af7eac249600068e..300376ef139b2a77c3136098d6ee540c12faa792 100644 (file)
@@ -1119,6 +1119,8 @@ hostfromname(lwres_gabnresponse_t *name, int af) {
         * Copy aliases.
         */
        he->h_aliases = malloc(sizeof(char *) * (name->naliases + 1));
+       if (he->h_aliases == NULL)
+               goto cleanup;
        for (i = 0; i < name->naliases; i++) {
                he->h_aliases[i] = strdup(name->aliases[i]);
                if (he->h_aliases[i] == NULL)
@@ -1130,6 +1132,8 @@ hostfromname(lwres_gabnresponse_t *name, int af) {
         * Copy addresses.
         */
        he->h_addr_list = malloc(sizeof(char *) * (name->naddrs + 1));
+       if (he->h_addr_list == NULL)
+               goto cleanup;
        addr = LWRES_LIST_HEAD(name->addrs);
        i = 0;
        while (addr != NULL) {