Copy name string in BIO_meth_new
authorRich Salz <rsalz@openssl.org>
Sat, 10 Feb 2018 18:36:47 +0000 (13:36 -0500)
committerRich Salz <rsalz@openssl.org>
Sat, 10 Feb 2018 18:36:47 +0000 (13:36 -0500)
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5318)

crypto/bio/bio_err.c
crypto/bio/bio_meth.c
crypto/err/openssl.txt
include/internal/bio.h
include/openssl/bioerr.h

index 50fc74bd85280e13c108ae09b39560e0a0ee673d..20f3aa14f8caaaf57bc7d5114b6893adf43b698f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
  *
  * Licensed under the OpenSSL license (the "License").  You may not use
  * this file except in compliance with the License.  You can obtain a copy
@@ -30,6 +30,7 @@ static const ERR_STRING_DATA BIO_str_functs[] = {
     {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_LOOKUP, 0), "BIO_lookup"},
     {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_LOOKUP_EX, 0), "BIO_lookup_ex"},
     {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_MAKE_PAIR, 0), "bio_make_pair"},
+    {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_METH_NEW, 0), "BIO_meth_new"},
     {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW, 0), "BIO_new"},
     {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW_DGRAM_SCTP, 0), "BIO_new_dgram_sctp"},
     {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW_FILE, 0), "BIO_new_file"},
index 1c5d196239cdee9ce974a8c6aa6f5423fe8efa91..a1fff141608d24c54f7ec8dd64afbe749e2fcc77 100644 (file)
@@ -37,16 +37,22 @@ BIO_METHOD *BIO_meth_new(int type, const char *name)
 {
     BIO_METHOD *biom = OPENSSL_zalloc(sizeof(BIO_METHOD));
 
-    if (biom != NULL) {
-        biom->type = type;
-        biom->name = name;
+    if (biom == NULL
+            || (biom->name = OPENSSL_strdup(name)) == NULL) {
+        OPENSSL_free(biom);
+        BIOerr(BIO_F_BIO_METH_NEW, ERR_R_MALLOC_FAILURE);
+        return NULL;
     }
+    biom->type = type;
     return biom;
 }
 
 void BIO_meth_free(BIO_METHOD *biom)
 {
-    OPENSSL_free(biom);
+    if (biom != NULL) {
+        OPENSSL_free(biom->name);
+        OPENSSL_free(biom);
+    }
 }
 
 int (*BIO_meth_get_write(BIO_METHOD *biom)) (BIO *, const char *, int)
index fb3be5720897cb80a97a69b02ba4393011657290..3ed71fe53ac2ba83607312d2fa55cb33a28ae13c 100644 (file)
@@ -127,6 +127,7 @@ BIO_F_BIO_LISTEN:139:BIO_listen
 BIO_F_BIO_LOOKUP:135:BIO_lookup
 BIO_F_BIO_LOOKUP_EX:143:BIO_lookup_ex
 BIO_F_BIO_MAKE_PAIR:121:bio_make_pair
+BIO_F_BIO_METH_NEW:146:BIO_meth_new
 BIO_F_BIO_NEW:108:BIO_new
 BIO_F_BIO_NEW_DGRAM_SCTP:145:BIO_new_dgram_sctp
 BIO_F_BIO_NEW_FILE:109:BIO_new_file
index 4428947f2d1e2c0deeb0d6f1c22a61958114cf98..5334d480dee44da6b196cac0f3e323d56127b97b 100644 (file)
@@ -11,7 +11,7 @@
 
 struct bio_method_st {
     int type;
-    const char *name;
+    char *name;
     int (*bwrite) (BIO *, const char *, size_t, size_t *);
     int (*bwrite_old) (BIO *, const char *, int);
     int (*bread) (BIO *, char *, size_t, size_t *);
index b0dee2bc345ba550ee21504b93614c17f33389ac..7a552d610543759d79e54d46165df573fe9e094e 100644 (file)
@@ -35,6 +35,7 @@ int ERR_load_BIO_strings(void);
 # define BIO_F_BIO_LOOKUP                                 135
 # define BIO_F_BIO_LOOKUP_EX                              143
 # define BIO_F_BIO_MAKE_PAIR                              121
+# define BIO_F_BIO_METH_NEW                               146
 # define BIO_F_BIO_NEW                                    108
 # define BIO_F_BIO_NEW_DGRAM_SCTP                         145
 # define BIO_F_BIO_NEW_FILE                               109