diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-05-29 05:55:02 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-05-29 05:55:02 +0000 |
commit | 0b8ad915b8c0fef1833716784dd94a0ef6caec92 (patch) | |
tree | ed014c958a0f622db02af64186def2c70e4c00ba /ext/openssl/ossl_x509name.c | |
parent | dfe11b5df4c8c37f07685da46eea7670dcb562be (diff) | |
download | ruby-0b8ad915b8c0fef1833716784dd94a0ef6caec92.tar.gz |
openssl: wrapper object before alloc
* ext/openssl: make wrapper objects before allocating structs to
get rid of potential memory leaks.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/openssl/ossl_x509name.c')
-rw-r--r-- | ext/openssl/ossl_x509name.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/ext/openssl/ossl_x509name.c b/ext/openssl/ossl_x509name.c index 7086f259b1..565a7cd18f 100644 --- a/ext/openssl/ossl_x509name.c +++ b/ext/openssl/ossl_x509name.c @@ -10,11 +10,13 @@ */ #include "ossl.h" -#define WrapX509Name(klass, obj, name) do { \ +#define NewX509Name(klass) \ + TypedData_Wrap_Struct((klass), &ossl_x509name_type, 0) +#define SetX509Name(obj, name) do { \ if (!(name)) { \ ossl_raise(rb_eRuntimeError, "Name wasn't initialized."); \ } \ - (obj) = TypedData_Wrap_Struct((klass), &ossl_x509name_type, (name)); \ + RTYPEDDATA_DATA(obj) = (name); \ } while (0) #define GetX509Name(obj, name) do { \ TypedData_Get_Struct((obj), X509_NAME, &ossl_x509name_type, (name)); \ @@ -61,6 +63,7 @@ ossl_x509name_new(X509_NAME *name) X509_NAME *new; VALUE obj; + obj = NewX509Name(cX509Name); if (!name) { new = X509_NAME_new(); } else { @@ -69,7 +72,7 @@ ossl_x509name_new(X509_NAME *name) if (!new) { ossl_raise(eX509NameError, NULL); } - WrapX509Name(cX509Name, obj, new); + SetX509Name(obj, new); return obj; } @@ -93,10 +96,11 @@ ossl_x509name_alloc(VALUE klass) X509_NAME *name; VALUE obj; + obj = NewX509Name(klass); if (!(name = X509_NAME_new())) { ossl_raise(eX509NameError, NULL); } - WrapX509Name(klass, obj, name); + SetX509Name(obj, name); return obj; } |