diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2017-09-03 12:27:16 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2018-08-08 18:40:04 +0900 |
commit | 49c9d3f473d9b12583e67971a20639170c0db95f (patch) | |
tree | f93cba29bb7a95ce6c36a2e4b75c2bab603b6416 /ext/openssl/ossl_x509name.c | |
parent | 88cb52d42d712c6633cfba657b89487e5748c731 (diff) | |
download | ruby-openssl-49c9d3f473d9b12583e67971a20639170c0db95f.tar.gz |
x509name: refactor OpenSSL::X509::Name#to_s
Extract the body into a function in preparation for adding #to_utf8.
Also a potential memory leak is fixed: the GetX509Name() macro can
raise TypeError.
(cherry picked from commit 58964733f7d1f9646ecc344d127150aa7115760e)
Diffstat (limited to 'ext/openssl/ossl_x509name.c')
-rw-r--r-- | ext/openssl/ossl_x509name.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/ext/openssl/ossl_x509name.c b/ext/openssl/ossl_x509name.c index e3e39e71..16a1b257 100644 --- a/ext/openssl/ossl_x509name.c +++ b/ext/openssl/ossl_x509name.c @@ -249,6 +249,23 @@ ossl_x509name_to_s_old(VALUE self) return str; } +static VALUE +x509name_print(VALUE self, unsigned long iflag) +{ + X509_NAME *name; + BIO *out; + + GetX509Name(self, name); + out = BIO_new(BIO_s_mem()); + if (!out) + ossl_raise(eX509NameError, NULL); + if (!X509_NAME_print_ex(out, name, 0, iflag)) { + BIO_free(out); + ossl_raise(eX509NameError, "X509_NAME_print_ex"); + } + return ossl_membio2str(out); +} + /* * call-seq: * name.to_s => string @@ -264,25 +281,12 @@ ossl_x509name_to_s_old(VALUE self) static VALUE ossl_x509name_to_s(int argc, VALUE *argv, VALUE self) { - X509_NAME *name; - VALUE flag, str; - BIO *out; - unsigned long iflag; - - rb_scan_args(argc, argv, "01", &flag); - if (NIL_P(flag)) + rb_check_arity(argc, 0, 1); + /* name.to_s(nil) was allowed */ + if (!argc || NIL_P(argv[0])) return ossl_x509name_to_s_old(self); - else iflag = NUM2ULONG(flag); - if (!(out = BIO_new(BIO_s_mem()))) - ossl_raise(eX509NameError, NULL); - GetX509Name(self, name); - if (!X509_NAME_print_ex(out, name, 0, iflag)){ - BIO_free(out); - ossl_raise(eX509NameError, NULL); - } - str = ossl_membio2str(out); - - return str; + else + return x509name_print(self, NUM2ULONG(argv[0])); } /* |