@@ -1118,30 +1118,31 @@ PHP_FUNCTION(openssl_x509_parse)
11181118
11191119 char * crit_name = NULL ;
11201120 int crit_len = 0 ;
1121- int crit = 0 ;
11221121
11231122 for (i = 0 ; i < X509_get_ext_count (cert ); i ++ ) {
11241123 int nid ;
11251124 extension = X509_get_ext (cert , i );
11261125 nid = OBJ_obj2nid (X509_EXTENSION_get_object (extension ));
1127- crit = X509_EXTENSION_get_critical (extension );
11281126 if (nid != NID_undef ) {
1129- extname = (char * )OBJ_nid2sn (OBJ_obj2nid ( X509_EXTENSION_get_object ( extension )) );
1127+ extname = (char * )OBJ_nid2sn (nid );
11301128 } else {
11311129 OBJ_obj2txt (buf , sizeof (buf )- 1 , X509_EXTENSION_get_object (extension ), 1 );
11321130 extname = buf ;
11331131 }
1134- if (crit ) {
1135- if (strlen (extname ) + 10 > crit_len ) {
1132+ if (X509_EXTENSION_get_critical (extension )) {
1133+ int new_len = strlen (extname ) + 10 ;
1134+ if (new_len > crit_len ) {
11361135 if (crit_name ) {
11371136 efree (crit_name );
11381137 }
1139- crit_len = strlen ( extname ) + 10 ;
1138+ crit_len = new_len ;
11401139 crit_name = emalloc (crit_len );
11411140 }
1142- strcpy (crit_name , extname );
1143- strcat (crit_name , ":critical" );
1144- add_assoc_bool (& subitem , crit_name , 1 );
1141+ if (crit_name ) {
1142+ strcpy (crit_name , extname );
1143+ strcat (crit_name , ":critical" );
1144+ add_assoc_bool (& subitem , crit_name , 1 );
1145+ }
11451146 }
11461147
11471148 bio_out = BIO_new (BIO_s_mem ());
0 commit comments