@@ -239,14 +239,31 @@ ossl_x509name_to_s_old(VALUE self)
239239{
240240 X509_NAME * name ;
241241 char * buf ;
242- VALUE str ;
243242
244243 GetX509Name (self , name );
245244 buf = X509_NAME_oneline (name , NULL , 0 );
246- str = rb_str_new2 (buf );
247- OPENSSL_free (buf );
245+ if (!buf )
246+ ossl_raise (eX509NameError , "X509_NAME_oneline" );
247+ return ossl_buf2str (buf , rb_long2int (strlen (buf )));
248+ }
248249
249- return str ;
250+ static VALUE
251+ x509name_print (VALUE self , unsigned long iflag )
252+ {
253+ X509_NAME * name ;
254+ BIO * out ;
255+ int ret ;
256+
257+ GetX509Name (self , name );
258+ out = BIO_new (BIO_s_mem ());
259+ if (!out )
260+ ossl_raise (eX509NameError , NULL );
261+ ret = X509_NAME_print_ex (out , name , 0 , iflag );
262+ if (ret < 0 || iflag == XN_FLAG_COMPAT && ret == 0 ) {
263+ BIO_free (out );
264+ ossl_raise (eX509NameError , "X509_NAME_print_ex" );
265+ }
266+ return ossl_membio2str (out );
250267}
251268
252269/*
@@ -264,25 +281,12 @@ ossl_x509name_to_s_old(VALUE self)
264281static VALUE
265282ossl_x509name_to_s (int argc , VALUE * argv , VALUE self )
266283{
267- X509_NAME * name ;
268- VALUE flag , str ;
269- BIO * out ;
270- unsigned long iflag ;
271-
272- rb_scan_args (argc , argv , "01" , & flag );
273- if (NIL_P (flag ))
284+ rb_check_arity (argc , 0 , 1 );
285+ /* name.to_s(nil) was allowed */
286+ if (!argc || NIL_P (argv [0 ]))
274287 return ossl_x509name_to_s_old (self );
275- else iflag = NUM2ULONG (flag );
276- if (!(out = BIO_new (BIO_s_mem ())))
277- ossl_raise (eX509NameError , NULL );
278- GetX509Name (self , name );
279- if (!X509_NAME_print_ex (out , name , 0 , iflag )){
280- BIO_free (out );
281- ossl_raise (eX509NameError , NULL );
282- }
283- str = ossl_membio2str (out );
284-
285- return str ;
288+ else
289+ return x509name_print (self , NUM2ULONG (argv [0 ]));
286290}
287291
288292/*
0 commit comments