@@ -663,16 +663,16 @@ static STACK_OF(X509) * php_openssl_load_all_certs_from_file(
663663 char * cert_file , size_t cert_file_len , uint32_t arg_num );
664664static EVP_PKEY * php_openssl_generate_private_key (struct php_x509_request * req );
665665
666- static void php_openssl_add_assoc_name_entry (zval * val , char * key , X509_NAME * name , int shortname ) /* {{{ */
666+ static void php_openssl_add_assoc_name_entry (zval * val , char * key , const X509_NAME * name , int shortname ) /* {{{ */
667667{
668668 zval * data ;
669669 zval subitem , tmp ;
670670 int i ;
671671 char * sname ;
672672 int nid ;
673- X509_NAME_ENTRY * ne ;
674- ASN1_STRING * str = NULL ;
675- ASN1_OBJECT * obj ;
673+ const X509_NAME_ENTRY * ne ;
674+ const ASN1_STRING * str = NULL ;
675+ const ASN1_OBJECT * obj ;
676676
677677 if (key != NULL ) {
678678 array_init (& subitem );
@@ -737,7 +737,7 @@ static void php_openssl_add_assoc_name_entry(zval * val, char * key, X509_NAME *
737737}
738738/* }}} */
739739
740- static void php_openssl_add_assoc_asn1_string (zval * val , char * key , ASN1_STRING * str ) /* {{{ */
740+ static void php_openssl_add_assoc_asn1_string (zval * val , char * key , const ASN1_STRING * str ) /* {{{ */
741741{
742742 add_assoc_stringl (val , key , (const char * )ASN1_STRING_get0_data (str ), ASN1_STRING_length (str ));
743743}
@@ -1324,7 +1324,7 @@ PHP_MINIT_FUNCTION(openssl)
13241324 }
13251325
13261326 php_stream_xport_register ("ssl" , php_openssl_ssl_socket_factory );
1327- #ifndef OPENSSL_NO_SSL3
1327+ #if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined( OPENSSL_NO_SSL3 )
13281328 php_stream_xport_register ("sslv3" , php_openssl_ssl_socket_factory );
13291329#endif
13301330 php_stream_xport_register ("tls" , php_openssl_ssl_socket_factory );
@@ -1410,7 +1410,7 @@ PHP_MSHUTDOWN_FUNCTION(openssl)
14101410 php_unregister_url_stream_wrapper ("ftps" );
14111411
14121412 php_stream_xport_unregister ("ssl" );
1413- #ifndef OPENSSL_NO_SSL3
1413+ #if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined( OPENSSL_NO_SSL3 )
14141414 php_stream_xport_unregister ("sslv3" );
14151415#endif
14161416 php_stream_xport_unregister ("tls" );
@@ -2026,11 +2026,11 @@ PHP_FUNCTION(openssl_x509_verify)
20262026 * Christian Heimes
20272027 */
20282028
2029- static int openssl_x509v3_subjectAltName (BIO * bio , X509_EXTENSION * extension )
2029+ static int openssl_x509v3_subjectAltName (BIO * bio , PHP_OPENSSL_X509_EXTENSION * extension )
20302030{
20312031 GENERAL_NAMES * names ;
20322032 const X509V3_EXT_METHOD * method = NULL ;
2033- ASN1_OCTET_STRING * extension_data ;
2033+ const ASN1_OCTET_STRING * extension_data ;
20342034 long i , length , num ;
20352035 const unsigned char * p ;
20362036
@@ -2103,8 +2103,8 @@ PHP_FUNCTION(openssl_x509_parse)
21032103 bool useshortnames = 1 ;
21042104 char * tmpstr ;
21052105 zval subitem ;
2106- X509_EXTENSION * extension ;
2107- X509_NAME * subject_name ;
2106+ PHP_OPENSSL_X509_EXTENSION * extension ;
2107+ const X509_NAME * subject_name ;
21082108 char * cert_name ;
21092109 char * extname ;
21102110 BIO * bio_out ;
@@ -2989,7 +2989,12 @@ static zend_result php_openssl_csr_make(struct php_x509_request * req, X509_REQ
29892989 zval * item , * subitem ;
29902990 zend_string * strindex = NULL ;
29912991
2992- subj = X509_REQ_get_subject_name (csr );
2992+ subj = X509_NAME_new ();
2993+ if (subj == NULL ) {
2994+ php_openssl_store_errors ();
2995+ return FAILURE ;
2996+ }
2997+
29932998 /* apply values from the dn hash */
29942999 ZEND_HASH_FOREACH_STR_KEY_VAL (Z_ARRVAL_P (dn ), strindex , item ) {
29953000 if (strindex ) {
@@ -2998,10 +3003,12 @@ static zend_result php_openssl_csr_make(struct php_x509_request * req, X509_REQ
29983003 if (Z_TYPE_P (item ) == IS_ARRAY ) {
29993004 ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (item ), i , subitem ) {
30003005 if (php_openssl_csr_add_subj_entry (subitem , subj , nid ) == FAILURE ) {
3006+ X509_NAME_free (subj );
30013007 return FAILURE ;
30023008 }
30033009 } ZEND_HASH_FOREACH_END ();
30043010 } else if (php_openssl_csr_add_subj_entry (item , subj , nid ) == FAILURE ) {
3011+ X509_NAME_free (subj );
30053012 return FAILURE ;
30063013 }
30073014 } else {
@@ -3052,13 +3059,23 @@ static zend_result php_openssl_csr_make(struct php_x509_request * req, X509_REQ
30523059 if (!X509_NAME_add_entry_by_txt (subj , type , MBSTRING_UTF8 , (unsigned char * )v -> value , -1 , -1 , 0 )) {
30533060 php_openssl_store_errors ();
30543061 php_error_docref (NULL , E_WARNING , "add_entry_by_txt %s -> %s (failed)" , type , v -> value );
3062+ X509_NAME_free (subj );
30553063 return FAILURE ;
30563064 }
30573065 if (!X509_NAME_entry_count (subj )) {
30583066 php_error_docref (NULL , E_WARNING , "No objects specified in config file" );
3067+ X509_NAME_free (subj );
30593068 return FAILURE ;
30603069 }
30613070 }
3071+
3072+ if (!X509_REQ_set_subject_name (csr , subj )) {
3073+ php_openssl_store_errors ();
3074+ X509_NAME_free (subj );
3075+ return FAILURE ;
3076+ }
3077+ X509_NAME_free (subj );
3078+
30623079 if (attribs ) {
30633080 ZEND_HASH_FOREACH_STR_KEY_VAL (Z_ARRVAL_P (attribs ), strindex , item ) {
30643081 int nid ;
@@ -3547,7 +3564,7 @@ PHP_FUNCTION(openssl_csr_get_subject)
35473564 zend_object * csr_obj ;
35483565 zend_string * csr_str ;
35493566 bool use_shortnames = 1 ;
3550- X509_NAME * subject ;
3567+ const X509_NAME * subject ;
35513568
35523569 ZEND_PARSE_PARAMETERS_START (1 , 2 )
35533570 Z_PARAM_OBJ_OF_CLASS_OR_STR (csr_obj , php_openssl_request_ce , csr_str )
@@ -4697,7 +4714,7 @@ static EVP_PKEY *php_openssl_pkey_init_ec(zval *data, bool *is_private) {
46974714 }
46984715
46994716 OPENSSL_PKEY_SET_BN (data , cofactor );
4700- if (!OSSL_PARAM_BLD_push_BN (bld , OSSL_PKEY_PARAM_EC_COFACTOR , cofactor ) ||
4717+ if (( cofactor && !OSSL_PARAM_BLD_push_BN (bld , OSSL_PKEY_PARAM_EC_COFACTOR , cofactor ) ) ||
47014718 !EC_GROUP_set_generator (group , point_g , order , cofactor )) {
47024719 goto cleanup ;
47034720 }
0 commit comments