openssl: fix bad memory free (regression) 67/90767/2 accepted/tizen/3.0/ivi/20161011.043815 accepted/tizen/3.0/mobile/20161015.032650 accepted/tizen/3.0/tv/20161016.004006 accepted/tizen/3.0/wearable/20161015.081908 accepted/tizen/common/20161004.194334 accepted/tizen/ivi/20161005.080315 accepted/tizen/mobile/20161005.080228 accepted/tizen/tv/20161005.080243 accepted/tizen/wearable/20161005.080258 submit/tizen/20161004.080743 submit/tizen_3.0_ivi/20161010.000001 submit/tizen_3.0_mobile/20161015.000001 submit/tizen_3.0_tv/20161015.000001 submit/tizen_3.0_wearable/20161015.000001
authorSeonah Moon <seonah1.moon@samsung.com>
Tue, 4 Oct 2016 07:35:59 +0000 (16:35 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Tue, 4 Oct 2016 07:37:52 +0000 (16:37 +0900)
The allocation could be made by OpenSSL so the free must be made with OPENSSL_free() to avoid problems.
(https://github.com/curl/curl/issues/1005)

Change-Id: I07527924fe20ed859cbd5d7ade356410c64d71c7
Signed-off-by: Seonah Moon <seonah1.moon@samsung.com>
lib/vtls/openssl.c

index 0a3e6a3..0a46f9d 100644 (file)
@@ -1223,7 +1223,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
         if(ASN1_STRING_type(tmp) == V_ASN1_UTF8STRING) {
           j = ASN1_STRING_length(tmp);
           if(j >= 0) {
-            peer_CN = malloc(j+1);
+            peer_CN = OPENSSL_malloc(j+1);
             if(peer_CN) {
               memcpy(peer_CN, ASN1_STRING_get0_data(tmp), j);
               peer_CN[j] = '\0';
@@ -1249,7 +1249,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
       CURLcode rc = Curl_convert_from_utf8(data, peer_CN, strlen(peer_CN));
       /* Curl_convert_from_utf8 calls failf if unsuccessful */
       if(rc) {
-        free(peer_CN);
+        OPENSSL_free(peer_CN);
         return rc;
       }
     }
@@ -1271,7 +1271,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
       infof(data, " common name: %s (matched)\n", peer_CN);
     }
     if(peer_CN)
-      free(peer_CN);
+      OPENSSL_free(peer_CN);
   }
 
   return result;