mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4: Update NEWS for OpenSSL changes Fix memory leaks in openssl_cms_encrypt() when push fails Fix memory leaks in openssl_pkcs7_encrypt() when push fails Fix missing error propagation when php_array_to_X509_sk() fails Fix memory leaks in php_array_to_X509_sk() when push fails Fix memory leak in php_openssl_load_all_certs_from_file() when push fails Closes GH-20986.
This commit is contained in:
3
NEWS
3
NEWS
@@ -38,6 +38,9 @@ PHP NEWS
|
||||
. Fixed bug GH-21227 (Borked SCCP of array containing partial object).
|
||||
(ilutov)
|
||||
|
||||
OpenSSL:
|
||||
. Fix a bunch of leaks and error propagation. (ndossche)
|
||||
|
||||
- Windows:
|
||||
. Fixed compilation with clang (missing intrin.h include). (Kévin Dunglas)
|
||||
|
||||
|
||||
@@ -1272,8 +1272,6 @@ PHP_FUNCTION(openssl_x509_free)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* {{{ Creates and exports a PKCS to file */
|
||||
PHP_FUNCTION(openssl_pkcs12_export_to_file)
|
||||
{
|
||||
@@ -1339,6 +1337,9 @@ PHP_FUNCTION(openssl_pkcs12_export_to_file)
|
||||
|
||||
if (args && (item = zend_hash_str_find(Z_ARRVAL_P(args), "extracerts", sizeof("extracerts")-1)) != NULL) {
|
||||
ca = php_openssl_array_to_X509_sk(item, 5, "extracerts");
|
||||
if (!ca) {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
/* end parse extra config */
|
||||
|
||||
@@ -1432,6 +1433,9 @@ PHP_FUNCTION(openssl_pkcs12_export)
|
||||
|
||||
if (args && (item = zend_hash_str_find(Z_ARRVAL_P(args), "extracerts", sizeof("extracerts")-1)) != NULL) {
|
||||
ca = php_openssl_array_to_X509_sk(item, 5, "extracerts");
|
||||
if (!ca) {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
/* end parse extra config */
|
||||
|
||||
@@ -2651,7 +2655,10 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
sk_X509_push(recipcerts, cert);
|
||||
if (sk_X509_push(recipcerts, cert) <= 0) {
|
||||
X509_free(cert);
|
||||
goto clean_exit;
|
||||
}
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
} else {
|
||||
/* a single certificate */
|
||||
@@ -2672,7 +2679,10 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
sk_X509_push(recipcerts, cert);
|
||||
if (sk_X509_push(recipcerts, cert) <= 0) {
|
||||
X509_free(cert);
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
|
||||
/* sanity check the cipher */
|
||||
@@ -3267,7 +3277,10 @@ PHP_FUNCTION(openssl_cms_encrypt)
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
sk_X509_push(recipcerts, cert);
|
||||
if (sk_X509_push(recipcerts, cert) <= 0) {
|
||||
php_openssl_store_errors();
|
||||
goto clean_exit;
|
||||
}
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
} else {
|
||||
/* a single certificate */
|
||||
@@ -3287,7 +3300,10 @@ PHP_FUNCTION(openssl_cms_encrypt)
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
sk_X509_push(recipcerts, cert);
|
||||
if (sk_X509_push(recipcerts, cert) <= 0) {
|
||||
php_openssl_store_errors();
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
|
||||
/* sanity check the cipher */
|
||||
|
||||
@@ -692,21 +692,13 @@ STACK_OF(X509) *php_openssl_load_all_certs_from_file(
|
||||
X509_INFO *xi;
|
||||
char cert_path[MAXPATHLEN];
|
||||
|
||||
if(!(stack = sk_X509_new_null())) {
|
||||
php_openssl_store_errors();
|
||||
php_error_docref(NULL, E_ERROR, "Memory allocation failure");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!php_openssl_check_path(cert_file, cert_file_len, cert_path, arg_num)) {
|
||||
sk_X509_free(stack);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!(in = BIO_new_file(cert_path, PHP_OPENSSL_BIO_MODE_R(PKCS7_BINARY)))) {
|
||||
php_openssl_store_errors();
|
||||
php_error_docref(NULL, E_WARNING, "Error opening the file, %s", cert_path);
|
||||
sk_X509_free(stack);
|
||||
goto end;
|
||||
}
|
||||
|
||||
@@ -714,7 +706,11 @@ STACK_OF(X509) *php_openssl_load_all_certs_from_file(
|
||||
if (!(sk = php_openssl_pem_read_bio_x509_info(in))) {
|
||||
php_openssl_store_errors();
|
||||
php_error_docref(NULL, E_WARNING, "Error reading the file, %s", cert_path);
|
||||
sk_X509_free(stack);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if(!(stack = sk_X509_new_reserve(NULL, sk_X509_INFO_num(sk)))) {
|
||||
php_openssl_store_errors();
|
||||
goto end;
|
||||
}
|
||||
|
||||
@@ -886,7 +882,10 @@ STACK_OF(X509) *php_openssl_array_to_X509_sk(zval * zcerts, uint32_t arg_num, co
|
||||
}
|
||||
|
||||
}
|
||||
sk_X509_push(sk, cert);
|
||||
if (sk_X509_push(sk, cert) <= 0) {
|
||||
X509_free(cert);
|
||||
goto push_fail_exit;
|
||||
}
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
} else {
|
||||
/* a single certificate */
|
||||
@@ -904,11 +903,20 @@ STACK_OF(X509) *php_openssl_array_to_X509_sk(zval * zcerts, uint32_t arg_num, co
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
sk_X509_push(sk, cert);
|
||||
if (sk_X509_push(sk, cert) <= 0) {
|
||||
X509_free(cert);
|
||||
goto push_fail_exit;
|
||||
}
|
||||
}
|
||||
|
||||
clean_exit:
|
||||
return sk;
|
||||
|
||||
push_fail_exit:
|
||||
php_openssl_store_errors();
|
||||
php_openssl_sk_X509_free(sk);
|
||||
sk = NULL;
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
zend_result php_openssl_csr_add_subj_entry(zval *item, X509_NAME *subj, int nid)
|
||||
|
||||
Reference in New Issue
Block a user