]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
address NULL pointer dereferences
authorMark Andrews <marka@isc.org>
Wed, 4 Sep 2019 01:27:16 +0000 (11:27 +1000)
committerMark Andrews <marka@isc.org>
Wed, 4 Sep 2019 04:37:56 +0000 (14:37 +1000)
(cherry picked from commit 2de94dd4c4ee170b071dd9c61cb10f3aedaa4485)

contrib/dlz/modules/mysqldyn/dlz_mysqldyn_mod.c

index 577ae65a42699c2d06401872441d6adb429eae58..f8e47f8f24c15bb78e0f2cc6dcfa1d62f4b7bae3 100644 (file)
@@ -1297,9 +1297,21 @@ dlz_newversion(const char *zone, void *dbdata, void **versionp) {
         * Create new transaction
         */
        newtx = (mysql_transaction_t *)
-               malloc(sizeof(mysql_transaction_t));
+               calloc(1, sizeof(mysql_transaction_t));
+       if (newtx == NULL) {
+               result = ISC_R_NOMEMORY;
+               goto cleanup;
+       }
        newtx->zone = strdup(zone);
+       if (newtx->zone == NULL) {
+               result = ISC_R_NOMEMORY;
+               goto cleanup;
+       }
        newtx->zone_id = strdup(zone_id);
+       if (newtx->zone_id == NULL) {
+               result = ISC_R_NOMEMORY;
+               goto cleanup;
+       }
        newtx->dbi = get_dbi(state);
        newtx->next = NULL;
 
@@ -1329,9 +1341,15 @@ dlz_newversion(const char *zone, void *dbdata, void **versionp) {
                *versionp = (void *) newtx;
        } else {
                dlz_mutex_unlock(&state->tx_mutex);
-               free(newtx->zone);
-               free(newtx->zone_id);
-               free(newtx);
+               if (newtx != NULL) {
+                       if (newtx->zone != NULL) {
+                               free(newtx->zone);
+                       }
+                       if (newtx->zone != NULL) {
+                               free(newtx->zone_id);
+                       }
+                       free(newtx);
+               }
        }
 
        return (result);