]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.0' into PHP-7.1
authorAnatol Belski <ab@php.net>
Thu, 18 May 2017 10:07:09 +0000 (12:07 +0200)
committerAnatol Belski <ab@php.net>
Thu, 18 May 2017 10:07:09 +0000 (12:07 +0200)
* PHP-7.0:
  follow up fix on bug #74022

1  2 
ext/openssl/openssl.c

index 766178b8f7700073a2ef00eb6231e93e02ad2f1e,9f3521f5e646c8742399b84427245b40f655e0a1..c1aa19679e02ed709baaae280928b3de9ab84e34
@@@ -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: