Fix some more memory leaks with TXT_DB_insert.
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Sun, 19 Feb 2017 19:13:45 +0000 (20:13 +0100)
committerRich Salz <rsalz@openssl.org>
Tue, 21 Feb 2017 19:36:00 +0000 (14:36 -0500)
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2684)
(cherry picked from commit 0fbaef9e64fa10446aff805791befaa2b967e322)

apps/ca.c
apps/srp.c

index 178be50ebc109bd57074e4e37fb9f4d8a19fb2d2..350a748436f84339bc7625cd71304e92b88007d0 100644 (file)
--- a/apps/ca.c
+++ b/apps/ca.c
@@ -2063,19 +2063,26 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value)
         row[DB_rev_date] = NULL;
         row[DB_file] = OPENSSL_strdup("unknown");
 
+        if (row[DB_type] == NULL || row[DB_file] == NULL) {
+            BIO_printf(bio_err, "Memory allocation failure\n");
+            goto end;
+        }
+
         irow = app_malloc(sizeof(*irow) * (DB_NUMBER + 1), "row ptr");
-        for (i = 0; i < DB_NUMBER; i++) {
+        for (i = 0; i < DB_NUMBER; i++)
             irow[i] = row[i];
-            row[i] = NULL;
-        }
         irow[DB_NUMBER] = NULL;
 
         if (!TXT_DB_insert(db->db, irow)) {
             BIO_printf(bio_err, "failed to update database\n");
             BIO_printf(bio_err, "TXT_DB error number %ld\n", db->db->error);
+            OPENSSL_free(irow);
             goto end;
         }
 
+        for (i = 0; i < DB_NUMBER; i++)
+            row[i] = NULL;
+
         /* Revoke Certificate */
         if (type == -1)
             ok = 1;
@@ -2108,9 +2115,8 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value)
     }
     ok = 1;
  end:
-    for (i = 0; i < DB_NUMBER; i++) {
+    for (i = 0; i < DB_NUMBER; i++)
         OPENSSL_free(row[i]);
-    }
     return (ok);
 }
 
index add010037cfe0bd82224b5c4bd12a6736aafc13b..253a3a30077888eba4b4a9fc01fcf366323ef831 100644 (file)
@@ -92,10 +92,8 @@ static int update_index(CA_DB *db, char **row)
     int i;
 
     irow = app_malloc(sizeof(*irow) * (DB_NUMBER + 1), "row pointers");
-    for (i = 0; i < DB_NUMBER; i++) {
+    for (i = 0; i < DB_NUMBER; i++)
         irow[i] = row[i];
-        row[i] = NULL;
-    }
     irow[DB_NUMBER] = NULL;
 
     if (!TXT_DB_insert(db->db, irow)) {