Skip to content

Commit

Permalink
x509name: refactor OpenSSL::X509::Name#to_s
Browse files Browse the repository at this point in the history
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 5896473)
  • Loading branch information
rhenium committed Aug 8, 2018
1 parent 88cb52d commit 49c9d3f
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions ext/openssl/ossl_x509name.c
Expand Up @@ -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
Expand All @@ -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]));
}

/*
Expand Down

0 comments on commit 49c9d3f

Please sign in to comment.