@@ -557,21 +557,16 @@ ossl_pkcs7_get_signer(VALUE self)
557557{
558558 PKCS7 * pkcs7 ;
559559 STACK_OF (PKCS7_SIGNER_INFO ) * sk ;
560- PKCS7_SIGNER_INFO * si ;
561560 int num , i ;
562561 VALUE ary ;
563562
564563 GetPKCS7 (self , pkcs7 );
565- if (!(sk = PKCS7_get_signer_info (pkcs7 ))) {
566- OSSL_Debug ("OpenSSL::PKCS7#get_signer_info == NULL!" );
567- return rb_ary_new ();
568- }
569- if ((num = sk_PKCS7_SIGNER_INFO_num (sk )) < 0 ) {
570- ossl_raise (ePKCS7Error , "Negative number of signers!" );
571- }
572- ary = rb_ary_new2 (num );
564+ if (!(sk = PKCS7_get_signer_info (pkcs7 )))
565+ return rb_ary_new ();
566+ num = sk_PKCS7_SIGNER_INFO_num (sk );
567+ ary = rb_ary_new_capa (num );
573568 for (i = 0 ; i < num ; i ++ ) {
574- si = sk_PKCS7_SIGNER_INFO_value (sk , i );
569+ PKCS7_SIGNER_INFO * si = sk_PKCS7_SIGNER_INFO_value (sk , i );
575570 rb_ary_push (ary , ossl_pkcs7si_new (si ));
576571 }
577572
@@ -604,7 +599,6 @@ ossl_pkcs7_get_recipient(VALUE self)
604599{
605600 PKCS7 * pkcs7 ;
606601 STACK_OF (PKCS7_RECIP_INFO ) * sk ;
607- PKCS7_RECIP_INFO * si ;
608602 int num , i ;
609603 VALUE ary ;
610604
@@ -615,13 +609,11 @@ ossl_pkcs7_get_recipient(VALUE self)
615609 sk = pkcs7 -> d .signed_and_enveloped -> recipientinfo ;
616610 else sk = NULL ;
617611 if (!sk ) return rb_ary_new ();
618- if ((num = sk_PKCS7_RECIP_INFO_num (sk )) < 0 ) {
619- ossl_raise (ePKCS7Error , "Negative number of recipient!" );
620- }
621- ary = rb_ary_new2 (num );
612+ num = sk_PKCS7_RECIP_INFO_num (sk );
613+ ary = rb_ary_new_capa (num );
622614 for (i = 0 ; i < num ; i ++ ) {
623- si = sk_PKCS7_RECIP_INFO_value (sk , i );
624- rb_ary_push (ary , ossl_pkcs7ri_new (si ));
615+ PKCS7_RECIP_INFO * ri = sk_PKCS7_RECIP_INFO_value (sk , i );
616+ rb_ary_push (ary , ossl_pkcs7ri_new (ri ));
625617 }
626618
627619 return ary ;
@@ -701,7 +693,10 @@ ossl_pkcs7_set_certificates(VALUE self, VALUE ary)
701693 X509 * cert ;
702694
703695 certs = pkcs7_get_certs (self );
704- while ((cert = sk_X509_pop (certs ))) X509_free (cert );
696+ if (certs ) {
697+ while ((cert = sk_X509_pop (certs )))
698+ X509_free (cert );
699+ }
705700 rb_block_call (ary , rb_intern ("each" ), 0 , 0 , ossl_pkcs7_set_certs_i , self );
706701
707702 return ary ;
@@ -710,7 +705,10 @@ ossl_pkcs7_set_certificates(VALUE self, VALUE ary)
710705static VALUE
711706ossl_pkcs7_get_certificates (VALUE self )
712707{
713- return ossl_x509_sk2ary (pkcs7_get_certs (self ));
708+ STACK_OF (X509 ) * certs = pkcs7_get_certs (self );
709+ if (!certs )
710+ return Qnil ;
711+ return ossl_x509_sk2ary (certs );
714712}
715713
716714static VALUE
@@ -741,7 +739,10 @@ ossl_pkcs7_set_crls(VALUE self, VALUE ary)
741739 X509_CRL * crl ;
742740
743741 crls = pkcs7_get_crls (self );
744- while ((crl = sk_X509_CRL_pop (crls ))) X509_CRL_free (crl );
742+ if (crls ) {
743+ while ((crl = sk_X509_CRL_pop (crls )))
744+ X509_CRL_free (crl );
745+ }
745746 rb_block_call (ary , rb_intern ("each" ), 0 , 0 , ossl_pkcs7_set_crls_i , self );
746747
747748 return ary ;
@@ -750,7 +751,10 @@ ossl_pkcs7_set_crls(VALUE self, VALUE ary)
750751static VALUE
751752ossl_pkcs7_get_crls (VALUE self )
752753{
753- return ossl_x509crl_sk2ary (pkcs7_get_crls (self ));
754+ STACK_OF (X509_CRL ) * crls = pkcs7_get_crls (self );
755+ if (!crls )
756+ return Qnil ;
757+ return ossl_x509crl_sk2ary (crls );
754758}
755759
756760static VALUE
0 commit comments