com php-src: Merge branch 'PHP-7.0' into PHP-7.1: ext/openssl/openssl.c

[email protected] (Anatol Belski)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    26f217bf4078096707b916f33db4e8e37b016093
Author:    Anatol Belski <[email protected]>         Thu, 18 May 2017 12:07:09 +0200
Parents:   649494c0ee54102ac4a6c62fd5faf38143efb107 464c1639ae544e3952823caf169d2e4199a32fc3
Branches:  PHP-7.1 master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=26f217bf4078096707b916f33db4e8e37b016093

Log:
Merge branch 'PHP-7.0' into PHP-7.1

* PHP-7.0:
  follow up fix on bug #74022

Bugs:
https://bugs.php.net/74022

Changed paths:
  MM  ext/openssl/openssl.c


Diff:
diff --cc ext/openssl/openssl.c
index 766178b,9f3521f..c1aa196
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@@ -2934,71 -2789,78 +2934,73 @@@ PHP_FUNCTION(openssl_pkcs12_read
  
  	bio_in = BIO_new(BIO_s_mem());
  
 -	if(0 >= BIO_write(bio_in, zp12, (int)zp12_len))
 +	if (0 >= BIO_write(bio_in, zp12, (int)zp12_len)) {
 +		php_openssl_store_errors();
  		goto cleanup;
 +	}
  
 -	if(d2i_PKCS12_bio(bio_in, &p12)) {
 -		if(PKCS12_parse(p12, pass, &pkey, &cert, &ca)) {
 -			BIO * bio_out;
 -			int cert_num;
 +	if (d2i_PKCS12_bio(bio_in, &p12) && PKCS12_parse(p12, pass, &pkey, &cert, &ca)) {
 +		BIO * bio_out;
++		int cert_num;
  
 -			zval_dtor(zout);
 -			array_init(zout);
 +		zval_dtor(zout);
 +		array_init(zout);
  
 -			if (cert) {
 -				bio_out = BIO_new(BIO_s_mem());
 -				if (PEM_write_bio_X509(bio_out, cert)) {
 -					BUF_MEM *bio_buf;
 -					BIO_get_mem_ptr(bio_out, &bio_buf);
 -					ZVAL_STRINGL(&zcert, bio_buf->data, bio_buf->length);
 -					add_assoc_zval(zout, "cert", &zcert);
 -				}
 -				BIO_free(bio_out);
 +		if (cert) {
 +			bio_out = BIO_new(BIO_s_mem());
 +			if (PEM_write_bio_X509(bio_out, cert)) {
 +				BUF_MEM *bio_buf;
 +				BIO_get_mem_ptr(bio_out, &bio_buf);
 +				ZVAL_STRINGL(&zcert, bio_buf->data, bio_buf->length);
 +				add_assoc_zval(zout, "cert", &zcert);
 +			} else {
 +				php_openssl_store_errors();
  			}
 +			BIO_free(bio_out);
 +		}
  
 -			if (pkey) {
 -				bio_out = BIO_new(BIO_s_mem());
 -				if (PEM_write_bio_PrivateKey(bio_out, pkey, NULL, NULL, 0, 0, NULL)) {
 -					BUF_MEM *bio_buf;
 -					BIO_get_mem_ptr(bio_out, &bio_buf);
 -					ZVAL_STRINGL(&zpkey, bio_buf->data, bio_buf->length);
 -					add_assoc_zval(zout, "pkey", &zpkey);
 -				}
 -				BIO_free(bio_out);
 +		if (pkey) {
 +			bio_out = BIO_new(BIO_s_mem());
 +			if (PEM_write_bio_PrivateKey(bio_out, pkey, NULL, NULL, 0, 0, NULL)) {
 +				BUF_MEM *bio_buf;
 +				BIO_get_mem_ptr(bio_out, &bio_buf);
 +				ZVAL_STRINGL(&zpkey, bio_buf->data, bio_buf->length);
 +				add_assoc_zval(zout, "pkey", &zpkey);
 +			} else {
 +				php_openssl_store_errors();
  			}
 +			BIO_free(bio_out);
 +		}
  
- 		if (ca && sk_X509_num(ca)) {
 -			cert_num = sk_X509_num(ca);
 -			if (ca && cert_num > 0) {
 -
 -				array_init(&zextracerts);
 -
 -				for (i=0; i < cert_num; i++) {
 -					zval zextracert;
 -					X509* aCA = sk_X509_pop(ca);
 -					if (!aCA) break;
 -
 -					/* fix for bug 69882 */
 -					{
 -						int err = ERR_peek_error();
 -						if (err == OPENSSL_ERROR_X509_PRIVATE_KEY_VALUES_MISMATCH) {
 -							ERR_get_error();
 -						}
 -					}
 -
 -					bio_out = BIO_new(BIO_s_mem());
 -					if (PEM_write_bio_X509(bio_out, aCA)) {
 -						BUF_MEM *bio_buf;
 -						BIO_get_mem_ptr(bio_out, &bio_buf);
 -						ZVAL_STRINGL(&zextracert, bio_buf->data, bio_buf->length);
 -						add_index_zval(&zextracerts, i, &zextracert);
++		cert_num = sk_X509_num(ca);
++		if (ca && cert_num) {
 +			array_init(&zextracerts);
  
- 			for (i = 0; i < sk_X509_num(ca); i++) {
 -					}
 -					BIO_free(bio_out);
++			for (i = 0; i < cert_num; i++) {
 +				zval zextracert;
 +				X509* aCA = sk_X509_pop(ca);
 +				if (!aCA) break;
  
 -					X509_free(aCA);
 +				bio_out = BIO_new(BIO_s_mem());
 +				if (PEM_write_bio_X509(bio_out, aCA)) {
 +					BUF_MEM *bio_buf;
 +					BIO_get_mem_ptr(bio_out, &bio_buf);
 +					ZVAL_STRINGL(&zextracert, bio_buf->data, bio_buf->length);
 +					add_index_zval(&zextracerts, i, &zextracert);
  				}
  
 -				sk_X509_free(ca);
 -				add_assoc_zval(zout, "extracerts", &zextracerts);
 +				X509_free(aCA);
  			}
  
 -			RETVAL_TRUE;
 -
 -			PKCS12_free(p12);
 +			sk_X509_free(ca);
 +			add_assoc_zval(zout, "extracerts", &zextracerts);
  		}
 +
 +		RETVAL_TRUE;
 +
 +		PKCS12_free(p12);
 +	} else {
 +		php_openssl_store_errors();
  	}
  
  	cleanup:
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.