]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.6'
authorStanislav Malyshev <stas@php.net>
Mon, 1 Dec 2014 02:32:56 +0000 (18:32 -0800)
committerStanislav Malyshev <stas@php.net>
Mon, 1 Dec 2014 02:32:56 +0000 (18:32 -0800)
* PHP-5.6:
  Adds test cases for openssl EC improvements
  Adds better handling of EC keys: OPENSSL_KEYTYPE_EC
  Fixes memory leak introduced in 2b9af967

Conflicts:
ext/openssl/openssl.c

1  2 
ext/date/php_date.c
ext/openssl/openssl.c

Simple merge
index 147a9ec91927bf18589c545aade4c57c6777afde,00fd444c132f650c58f5c4d822e3784e50785a80..60d36ff7435f4d4b4c8772175b38766a233163a3
@@@ -3879,42 -3910,40 +3879,39 @@@ PHP_FUNCTION(openssl_pkey_get_details
  #ifdef HAVE_EVP_PKEY_EC
                case EVP_PKEY_EC:
                        ktype = OPENSSL_KEYTYPE_EC;
-                       if (pkey->pkey.ec == NULL) {
-                               break;
-                       }
-                       zval ec;
-                       const EC_GROUP *ec_group;
-                       int nid;
-                       char *crv_sn;
-                       ASN1_OBJECT *obj;
-                       // openssl recommends a buffer length of 80
-                       char oir_buf[80];
+                       if (pkey->pkey.ec != NULL) {
 -                              zval *ec;
++                              zval ec;
+                               const EC_GROUP *ec_group;
+                               int nid;
+                               char *crv_sn;
+                               ASN1_OBJECT *obj;
+                               // openssl recommends a buffer length of 80
+                               char oir_buf[80];
  
-                       ec_group = EC_KEY_get0_group(EVP_PKEY_get1_EC_KEY(pkey));
+                               ec_group = EC_KEY_get0_group(EVP_PKEY_get1_EC_KEY(pkey));
  
-                       // Curve nid (numerical identifier) used for ASN1 mapping
-                       nid = EC_GROUP_get_curve_name(ec_group);
-                       if (nid == NID_undef) {
-                               break;
-                       }
+                               // Curve nid (numerical identifier) used for ASN1 mapping
+                               nid = EC_GROUP_get_curve_name(ec_group);
+                               if (nid == NID_undef) {
+                                       break;
+                               }
 -                              ALLOC_INIT_ZVAL(ec);
 -                              array_init(ec);
++                              array_init(&ec);
  
-                       array_init(&ec);
+                               // Short object name
+                               crv_sn = (char*) OBJ_nid2sn(nid);
+                               if (crv_sn != NULL) {
 -                                      add_assoc_string(ec, "curve_name", crv_sn, 1);
++                                      add_assoc_string(&ec, "curve_name", crv_sn);
+                               }
  
-                       // Short object name
-                       crv_sn = (char*) OBJ_nid2sn(nid);
-                       if (crv_sn != NULL) {
-                               add_assoc_string(&ec, "curve_name", crv_sn);
-                       }
+                               obj = OBJ_nid2obj(nid);
+                               if (obj != NULL) {
+                                       int oir_len = OBJ_obj2txt(oir_buf, sizeof(oir_buf), obj, 1);
 -                                      add_assoc_stringl(ec, "curve_oid", (char*)oir_buf, oir_len, 1);
++                                      add_assoc_stringl(&ec, "curve_oid", (char*)oir_buf, oir_len);
+                                       ASN1_OBJECT_free(obj);
+                               }
  
-                       obj = OBJ_nid2obj(nid);
-                       if (obj != NULL) {
-                               int oir_len = OBJ_obj2txt(oir_buf, sizeof(oir_buf), obj, 1);
-                               add_assoc_stringl(&ec, "curve_oid", (char*)oir_buf, oir_len);
-                               ASN1_OBJECT_free(obj);
 -                              add_assoc_zval(return_value, "ec", ec);
++                              add_assoc_zval(return_value, "ec", &ec);
                        }
-                       add_assoc_zval(return_value, "ec", &ec);
                        break;
  #endif
                default: