diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2016-08-13 17:07:04 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2016-08-16 14:22:07 +0900 |
commit | 2cb131e1ccdb6536ef3516b49ab90775688db3f3 (patch) | |
tree | 4fde932e3bb04f56611fac3e54a194cecf1c4506 /ext/openssl/ossl_x509attr.c | |
parent | fab8c3030e5dbcaf20bb50341f71213eab85a1ae (diff) | |
download | ruby-openssl-2cb131e1ccdb6536ef3516b49ab90775688db3f3.tar.gz |
x509attr: fix memory leak in X509::Attribute#oid=
ASN1_OBJECT returned by OBJ_txt2obj() must be free'd.
Diffstat (limited to 'ext/openssl/ossl_x509attr.c')
-rw-r--r-- | ext/openssl/ossl_x509attr.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/ext/openssl/ossl_x509attr.c b/ext/openssl/ossl_x509attr.c index 6b7f9da4..67b00b14 100644 --- a/ext/openssl/ossl_x509attr.c +++ b/ext/openssl/ossl_x509attr.c @@ -160,12 +160,15 @@ ossl_x509attr_set_oid(VALUE self, VALUE oid) ASN1_OBJECT *obj; char *s; + GetX509Attr(self, attr); s = StringValueCStr(oid); obj = OBJ_txt2obj(s, 0); - if(!obj) obj = OBJ_txt2obj(s, 1); if(!obj) ossl_raise(eX509AttrError, NULL); - GetX509Attr(self, attr); - X509_ATTRIBUTE_set1_object(attr, obj); + if (!X509_ATTRIBUTE_set1_object(attr, obj)) { + ASN1_OBJECT_free(obj); + ossl_raise(eX509AttrError, "X509_ATTRIBUTE_set1_object"); + } + ASN1_OBJECT_free(obj); return oid; } |