diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2016-08-03 21:26:14 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2016-08-16 14:22:07 +0900 |
commit | cb115ecc8e26e477ef27279094882480babc1fa7 (patch) | |
tree | c1923c97d245552a21d879b586620b4158a5a280 /ext/openssl/ossl_x509ext.c | |
parent | 1b1d520818e066d47fe60007b5b9dfec598ae52f (diff) | |
download | ruby-openssl-cb115ecc8e26e477ef27279094882480babc1fa7.tar.gz |
x509ext: fix memory leak in X509::Extension#oid=
X509_EXTENSION_set_object() dups the ASN1_OBJECT passed via the
argument so we need to free.
Diffstat (limited to 'ext/openssl/ossl_x509ext.c')
-rw-r--r-- | ext/openssl/ossl_x509ext.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/openssl/ossl_x509ext.c b/ext/openssl/ossl_x509ext.c index 17c4d234..c2bec94f 100644 --- a/ext/openssl/ossl_x509ext.c +++ b/ext/openssl/ossl_x509ext.c @@ -333,14 +333,16 @@ ossl_x509ext_set_oid(VALUE self, VALUE oid) { X509_EXTENSION *ext; ASN1_OBJECT *obj; - char *s; - s = StringValueCStr(oid); - obj = OBJ_txt2obj(s, 0); - if(!obj) obj = OBJ_txt2obj(s, 1); - if(!obj) ossl_raise(eX509ExtError, NULL); GetX509Ext(self, ext); - X509_EXTENSION_set_object(ext, obj); + obj = OBJ_txt2obj(StringValueCStr(oid), 0); + if (!obj) + ossl_raise(eX509ExtError, "OBJ_txt2obj"); + if (!X509_EXTENSION_set_object(ext, obj)) { + ASN1_OBJECT_free(obj); + ossl_raise(eX509ExtError, "X509_EXTENSION_set_object"); + } + ASN1_OBJECT_free(obj); return oid; } |