From: Anatol Belski Date: Thu, 18 May 2017 10:07:09 +0000 (+0200) Subject: Merge branch 'PHP-7.0' into PHP-7.1 X-Git-Tag: php-7.1.6RC1~4^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=26f217bf4078096707b916f33db4e8e37b016093;p=php Merge branch 'PHP-7.0' into PHP-7.1 * PHP-7.0: follow up fix on bug #74022 --- 26f217bf4078096707b916f33db4e8e37b016093 diff --cc ext/openssl/openssl.c index 766178b8f7,9f3521f5e6..c1aa19679e --- 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: