mirror of
https://github.com/php/php-src.git
synced 2026-04-18 21:41:22 +02:00
fix uninitialized var that may lead to crash
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
| Wez Furlong <wez@thebrainroom.com> |
|
||||
| Sascha Kettler <kettler@gmx.net> |
|
||||
| Pierre-Alain Joye <pierre@php.net> |
|
||||
| Marc Delling <delling@silpion.de> (PKCS12 functions) |
|
||||
| Marc Delling <delling@silpion.de> (PKCS12 functions) |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
@@ -510,7 +510,7 @@ inline static int php_openssl_open_base_dir_chk(char *filename TSRMLS_DC)
|
||||
if (php_check_open_basedir(filename TSRMLS_CC)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
/* }}} */
|
||||
@@ -569,7 +569,7 @@ static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int s
|
||||
} else {
|
||||
subitem = val;
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < X509_NAME_entry_count(name); i++) {
|
||||
unsigned char *to_add;
|
||||
int to_add_len;
|
||||
@@ -612,7 +612,7 @@ static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int s
|
||||
last = j;
|
||||
}
|
||||
i = last;
|
||||
|
||||
|
||||
if (obj_cnt > 1) {
|
||||
add_assoc_zval_ex(subitem, sname, strlen(sname) + 1, subentries);
|
||||
} else {
|
||||
@@ -712,7 +712,7 @@ static inline int php_openssl_config_check_syntax(const char * section_label, co
|
||||
#endif
|
||||
{
|
||||
X509V3_CTX ctx;
|
||||
|
||||
|
||||
X509V3_set_ctx_test(&ctx);
|
||||
X509V3_set_conf_lhash(&ctx, config);
|
||||
if (!X509V3_EXT_add_conf(config, &ctx, (char *)section, NULL)) {
|
||||
@@ -840,7 +840,7 @@ static int php_openssl_parse_config(struct php_x509_request * req, zval * option
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* digest alg */
|
||||
if (req->digest_name == NULL) {
|
||||
req->digest_name = CONF_get_string(req->req_config, req->section_name, "default_md");
|
||||
@@ -862,7 +862,7 @@ static int php_openssl_parse_config(struct php_x509_request * req, zval * option
|
||||
}
|
||||
|
||||
PHP_SSL_CONFIG_SYNTAX_CHECK(request_extensions_section);
|
||||
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
@@ -1025,10 +1025,10 @@ PHP_MINIT_FUNCTION(openssl)
|
||||
/* register a resource id number with OpenSSL so that we can map SSL -> stream structures in
|
||||
* OpenSSL callbacks */
|
||||
ssl_stream_data_index = SSL_get_ex_new_index(0, "PHP stream index", NULL, NULL, NULL);
|
||||
|
||||
|
||||
REGISTER_STRING_CONSTANT("OPENSSL_VERSION_TEXT", OPENSSL_VERSION_TEXT, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("OPENSSL_VERSION_NUMBER", OPENSSL_VERSION_NUMBER, CONST_CS|CONST_PERSISTENT);
|
||||
|
||||
|
||||
/* purposes for cert purpose checking */
|
||||
REGISTER_LONG_CONSTANT("X509_PURPOSE_SSL_CLIENT", X509_PURPOSE_SSL_CLIENT, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("X509_PURPOSE_SSL_SERVER", X509_PURPOSE_SSL_SERVER, CONST_CS|CONST_PERSISTENT);
|
||||
@@ -1080,7 +1080,7 @@ PHP_MINIT_FUNCTION(openssl)
|
||||
REGISTER_LONG_CONSTANT("OPENSSL_CIPHER_AES_192_CBC", PHP_OPENSSL_CIPHER_AES_192_CBC, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("OPENSSL_CIPHER_AES_256_CBC", PHP_OPENSSL_CIPHER_AES_256_CBC, CONST_CS|CONST_PERSISTENT);
|
||||
#endif
|
||||
|
||||
|
||||
/* Values for key types */
|
||||
REGISTER_LONG_CONSTANT("OPENSSL_KEYTYPE_RSA", OPENSSL_KEYTYPE_RSA, CONST_CS|CONST_PERSISTENT);
|
||||
#ifndef NO_DSA
|
||||
@@ -1126,7 +1126,7 @@ PHP_MINIT_FUNCTION(openssl)
|
||||
|
||||
php_register_url_stream_wrapper("https", &php_stream_http_wrapper TSRMLS_CC);
|
||||
php_register_url_stream_wrapper("ftps", &php_stream_ftp_wrapper TSRMLS_CC);
|
||||
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
@@ -1346,14 +1346,14 @@ PHP_FUNCTION(openssl_x509_check_private_key)
|
||||
long certresource = -1, keyresource = -1;
|
||||
|
||||
RETVAL_FALSE;
|
||||
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ", &zcert, &zkey) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
cert = php_openssl_x509_from_zval(zcert, 0, &certresource TSRMLS_CC);
|
||||
if (cert == NULL) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
key = php_openssl_evp_from_zval(zkey, 0, "", 1, &keyresource TSRMLS_CC);
|
||||
if (key) {
|
||||
RETVAL_BOOL(X509_check_private_key(cert, key));
|
||||
@@ -1406,11 +1406,11 @@ PHP_FUNCTION(openssl_x509_parse)
|
||||
snprintf(buf, sizeof(buf), "%08lx", X509_subject_name_hash(cert));
|
||||
add_assoc_string(return_value, "hash", buf, 1);
|
||||
}
|
||||
|
||||
|
||||
add_assoc_name_entry(return_value, "issuer", X509_get_issuer_name(cert), useshortnames TSRMLS_CC);
|
||||
add_assoc_long(return_value, "version", X509_get_version(cert));
|
||||
|
||||
add_assoc_string(return_value, "serialNumber", i2s_ASN1_INTEGER(NULL, X509_get_serialNumber(cert)), 1);
|
||||
add_assoc_string(return_value, "serialNumber", i2s_ASN1_INTEGER(NULL, X509_get_serialNumber(cert)), 1);
|
||||
|
||||
add_assoc_asn1_string(return_value, "validFrom", X509_get_notBefore(cert));
|
||||
add_assoc_asn1_string(return_value, "validTo", X509_get_notAfter(cert));
|
||||
@@ -1612,8 +1612,8 @@ clean_exit:
|
||||
if (certresource == 1 && cert) {
|
||||
X509_free(cert);
|
||||
}
|
||||
if (cainfo) {
|
||||
X509_STORE_free(cainfo);
|
||||
if (cainfo) {
|
||||
X509_STORE_free(cainfo);
|
||||
}
|
||||
if (untrustedchain) {
|
||||
sk_X509_pop_free(untrustedchain, X509_free);
|
||||
@@ -1666,7 +1666,7 @@ static X509_STORE * setup_verify(zval * calist TSRMLS_DC)
|
||||
dir_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
|
||||
if (dir_lookup == NULL || !X509_LOOKUP_add_dir(dir_lookup, Z_STRVAL_PP(item), X509_FILETYPE_PEM)) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "error loading directory %s", Z_STRVAL_PP(item));
|
||||
} else {
|
||||
} else {
|
||||
ndirs++;
|
||||
}
|
||||
dir_lookup = NULL;
|
||||
@@ -1760,11 +1760,11 @@ static STACK_OF(X509) * php_array_to_X509_sk(zval ** zcerts TSRMLS_DC) /* {{{ */
|
||||
|
||||
if (certresource != -1) {
|
||||
cert = X509_dup(cert);
|
||||
|
||||
|
||||
if (cert == NULL) {
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
sk_X509_push(sk, cert);
|
||||
|
||||
@@ -1773,7 +1773,7 @@ static STACK_OF(X509) * php_array_to_X509_sk(zval ** zcerts TSRMLS_DC) /* {{{ */
|
||||
} else {
|
||||
/* a single certificate */
|
||||
cert = php_openssl_x509_from_zval(zcerts, 0, &certresource TSRMLS_CC);
|
||||
|
||||
|
||||
if (cert == NULL) {
|
||||
goto clean_exit;
|
||||
}
|
||||
@@ -1814,7 +1814,7 @@ PHP_FUNCTION(openssl_pkcs12_export_to_file)
|
||||
return;
|
||||
|
||||
RETVAL_FALSE;
|
||||
|
||||
|
||||
cert = php_openssl_x509_from_zval(zcert, 0, &certresource TSRMLS_CC);
|
||||
if (cert == NULL) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get cert from parameter 1");
|
||||
@@ -1850,9 +1850,9 @@ PHP_FUNCTION(openssl_pkcs12_export_to_file)
|
||||
|
||||
p12 = PKCS12_create(pass, friendly_name, priv_key, cert, ca, 0, 0, 0, 0, 0);
|
||||
|
||||
bio_out = BIO_new_file(filename, "w");
|
||||
bio_out = BIO_new_file(filename, "w");
|
||||
if (bio_out) {
|
||||
|
||||
|
||||
i2d_PKCS12_bio(bio_out, p12);
|
||||
|
||||
RETVAL_TRUE;
|
||||
@@ -1863,13 +1863,13 @@ PHP_FUNCTION(openssl_pkcs12_export_to_file)
|
||||
BIO_free(bio_out);
|
||||
PKCS12_free(p12);
|
||||
php_sk_X509_free(ca);
|
||||
|
||||
|
||||
cleanup:
|
||||
|
||||
if (keyresource == -1 && priv_key) {
|
||||
EVP_PKEY_free(priv_key);
|
||||
}
|
||||
if (certresource == -1 && cert) {
|
||||
if (certresource == -1 && cert) {
|
||||
X509_free(cert);
|
||||
}
|
||||
}
|
||||
@@ -1895,7 +1895,7 @@ PHP_FUNCTION(openssl_pkcs12_export)
|
||||
return;
|
||||
|
||||
RETVAL_FALSE;
|
||||
|
||||
|
||||
cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
|
||||
if (cert == NULL) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get cert from parameter 1");
|
||||
@@ -1918,7 +1918,7 @@ PHP_FUNCTION(openssl_pkcs12_export)
|
||||
if (args && zend_hash_find(Z_ARRVAL_P(args), "extracerts", sizeof("extracerts"), (void**)&item) == SUCCESS)
|
||||
ca = php_array_to_X509_sk(item TSRMLS_CC);
|
||||
/* end parse extra config */
|
||||
|
||||
|
||||
p12 = PKCS12_create(pass, friendly_name, priv_key, cert, ca, 0, 0, 0, 0, 0);
|
||||
|
||||
bio_out = BIO_new(BIO_s_mem());
|
||||
@@ -1935,13 +1935,13 @@ PHP_FUNCTION(openssl_pkcs12_export)
|
||||
BIO_free(bio_out);
|
||||
PKCS12_free(p12);
|
||||
php_sk_X509_free(ca);
|
||||
|
||||
|
||||
cleanup:
|
||||
|
||||
if (keyresource == -1 && priv_key) {
|
||||
EVP_PKEY_free(priv_key);
|
||||
}
|
||||
if (certresource == -1 && cert) {
|
||||
if (certresource == -1 && cert) {
|
||||
X509_free(cert);
|
||||
}
|
||||
}
|
||||
@@ -1965,12 +1965,12 @@ PHP_FUNCTION(openssl_pkcs12_read)
|
||||
return;
|
||||
|
||||
RETVAL_FALSE;
|
||||
|
||||
|
||||
bio_in = BIO_new(BIO_s_mem());
|
||||
|
||||
|
||||
if(!BIO_write(bio_in, zp12, zp12_len))
|
||||
goto cleanup;
|
||||
|
||||
|
||||
if(d2i_PKCS12_bio(bio_in, &p12)) {
|
||||
if(PKCS12_parse(p12, pass, &pkey, &cert, &ca)) {
|
||||
BIO * bio_out;
|
||||
@@ -2000,12 +2000,12 @@ PHP_FUNCTION(openssl_pkcs12_read)
|
||||
|
||||
MAKE_STD_ZVAL(zextracerts);
|
||||
array_init(zextracerts);
|
||||
|
||||
|
||||
for (i=0;;i++) {
|
||||
zval * zextracert;
|
||||
X509* aCA = sk_X509_pop(ca);
|
||||
if (!aCA) break;
|
||||
|
||||
|
||||
bio_out = BIO_new(BIO_s_mem());
|
||||
if (PEM_write_bio_X509(bio_out, aCA)) {
|
||||
BUF_MEM *bio_buf;
|
||||
@@ -2013,7 +2013,7 @@ PHP_FUNCTION(openssl_pkcs12_read)
|
||||
MAKE_STD_ZVAL(zextracert);
|
||||
ZVAL_STRINGL(zextracert, bio_buf->data, bio_buf->length, 1);
|
||||
add_index_zval(zextracerts, i, zextracert);
|
||||
|
||||
|
||||
}
|
||||
BIO_free(bio_out);
|
||||
|
||||
@@ -2025,13 +2025,13 @@ PHP_FUNCTION(openssl_pkcs12_read)
|
||||
} else {
|
||||
zval_dtor(zextracerts);
|
||||
}
|
||||
|
||||
|
||||
RETVAL_TRUE;
|
||||
|
||||
|
||||
PKCS12_free(p12);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cleanup:
|
||||
if (bio_in) {
|
||||
BIO_free(bio_in);
|
||||
@@ -2039,7 +2039,7 @@ PHP_FUNCTION(openssl_pkcs12_read)
|
||||
if (pkey) {
|
||||
EVP_PKEY_free(pkey);
|
||||
}
|
||||
if (cert) {
|
||||
if (cert) {
|
||||
X509_free(cert);
|
||||
}
|
||||
}
|
||||
@@ -2058,7 +2058,7 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
|
||||
return FAILURE;
|
||||
}
|
||||
dn_sk = CONF_get_section(req->req_config, dn_sect);
|
||||
if (dn_sk == NULL) {
|
||||
if (dn_sk == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
attr_sect = CONF_get_string(req->req_config, req->section_name, "attributes");
|
||||
@@ -2078,15 +2078,15 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
|
||||
X509_NAME * subj;
|
||||
HashPosition hpos;
|
||||
zval ** item;
|
||||
|
||||
|
||||
subj = X509_REQ_get_subject_name(csr);
|
||||
/* apply values from the dn hash */
|
||||
zend_hash_internal_pointer_reset_ex(HASH_OF(dn), &hpos);
|
||||
while(zend_hash_get_current_data_ex(HASH_OF(dn), (void**)&item, &hpos) == SUCCESS) {
|
||||
char * strindex = NULL;
|
||||
char * strindex = NULL;
|
||||
uint strindexlen = 0;
|
||||
ulong intindex;
|
||||
|
||||
|
||||
zend_hash_get_current_key_ex(HASH_OF(dn), &strindex, &strindexlen, &intindex, 0, &hpos);
|
||||
|
||||
convert_to_string_ex(item);
|
||||
@@ -2096,7 +2096,7 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
|
||||
|
||||
nid = OBJ_txt2nid(strindex);
|
||||
if (nid != NID_undef) {
|
||||
if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_UTF8,
|
||||
if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_UTF8,
|
||||
(unsigned char*)Z_STRVAL_PP(item), -1, -1, 0))
|
||||
{
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING,
|
||||
@@ -2117,10 +2117,10 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
|
||||
for(i = 0; i < sk_CONF_VALUE_num(dn_sk); i++) {
|
||||
int len;
|
||||
char buffer[200 + 1]; /*200 + \0 !*/
|
||||
|
||||
|
||||
v = sk_CONF_VALUE_value(dn_sk, i);
|
||||
type = v->name;
|
||||
|
||||
|
||||
len = strlen(type);
|
||||
if (len < sizeof("_default")) {
|
||||
continue;
|
||||
@@ -2135,7 +2135,7 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
|
||||
memcpy(buffer, type, len);
|
||||
buffer[len] = '\0';
|
||||
type = buffer;
|
||||
|
||||
|
||||
/* Skip past any leading X. X: X, etc to allow for multiple
|
||||
* instances */
|
||||
for (str = type; *str; str++) {
|
||||
@@ -2216,7 +2216,7 @@ static X509_REQ * php_openssl_csr_from_zval(zval ** val, int makeresource, long
|
||||
X509_REQ * csr = NULL;
|
||||
char * filename = NULL;
|
||||
BIO * in;
|
||||
|
||||
|
||||
if (resourceval) {
|
||||
*resourceval = -1;
|
||||
}
|
||||
@@ -2357,13 +2357,13 @@ PHP_FUNCTION(openssl_csr_sign)
|
||||
long csr_resource, certresource = 0, keyresource = -1;
|
||||
int i;
|
||||
struct php_x509_request req;
|
||||
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ!Zl|a!l", &zcsr, &zcert, &zpkey, &num_days, &args, &serial) == FAILURE)
|
||||
return;
|
||||
|
||||
RETVAL_FALSE;
|
||||
PHP_SSL_REQ_INIT(&req);
|
||||
|
||||
|
||||
csr = php_openssl_csr_from_zval(zcsr, 0, &csr_resource TSRMLS_CC);
|
||||
if (csr == NULL) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get CSR from parameter 1");
|
||||
@@ -2385,7 +2385,7 @@ PHP_FUNCTION(openssl_csr_sign)
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "private key does not correspond to signing cert");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
||||
if (PHP_SSL_REQ_PARSE(&req, args) == FAILURE) {
|
||||
goto cleanup;
|
||||
}
|
||||
@@ -2405,9 +2405,9 @@ PHP_FUNCTION(openssl_csr_sign)
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Signature did not match the certificate request");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
||||
/* Now we can get on with it */
|
||||
|
||||
|
||||
new_cert = X509_new();
|
||||
if (new_cert == NULL) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "No memory");
|
||||
@@ -2418,7 +2418,7 @@ PHP_FUNCTION(openssl_csr_sign)
|
||||
goto cleanup;
|
||||
|
||||
ASN1_INTEGER_set(X509_get_serialNumber(new_cert), serial);
|
||||
|
||||
|
||||
X509_set_subject_name(new_cert, X509_REQ_get_subject_name(csr));
|
||||
|
||||
if (cert == NULL) {
|
||||
@@ -2435,7 +2435,7 @@ PHP_FUNCTION(openssl_csr_sign)
|
||||
}
|
||||
if (req.extensions_section) {
|
||||
X509V3_CTX ctx;
|
||||
|
||||
|
||||
X509V3_set_ctx(&ctx, cert, new_cert, csr, NULL, 0);
|
||||
X509V3_set_conf_lhash(&ctx, req.req_config);
|
||||
if (!X509V3_EXT_add_conf(req.req_config, &ctx, req.extensions_section, new_cert)) {
|
||||
@@ -2448,11 +2448,11 @@ PHP_FUNCTION(openssl_csr_sign)
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to sign it");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
||||
/* Succeeded; lets return the cert */
|
||||
RETVAL_RESOURCE(zend_list_insert(new_cert, le_x509 TSRMLS_CC));
|
||||
new_cert = NULL;
|
||||
|
||||
|
||||
cleanup:
|
||||
|
||||
if (cert == new_cert) {
|
||||
@@ -2469,7 +2469,7 @@ cleanup:
|
||||
if (csr_resource == -1 && csr) {
|
||||
X509_REQ_free(csr);
|
||||
}
|
||||
if (certresource == -1 && cert) {
|
||||
if (certresource == -1 && cert) {
|
||||
X509_free(cert);
|
||||
}
|
||||
if (new_cert) {
|
||||
@@ -2488,12 +2488,12 @@ PHP_FUNCTION(openssl_csr_new)
|
||||
X509_REQ * csr = NULL;
|
||||
int we_made_the_key = 1;
|
||||
long key_resource;
|
||||
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "az|a!a!", &dn, &out_pkey, &args, &attribs) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
RETVAL_FALSE;
|
||||
|
||||
|
||||
PHP_SSL_REQ_INIT(&req);
|
||||
|
||||
if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS) {
|
||||
@@ -2525,10 +2525,10 @@ PHP_FUNCTION(openssl_csr_new)
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error loading extension section %s", req.request_extensions_section);
|
||||
} else {
|
||||
RETVAL_TRUE;
|
||||
|
||||
|
||||
if (X509_REQ_sign(csr, req.priv_key, req.digest)) {
|
||||
RETVAL_RESOURCE(zend_list_insert(csr, le_csr TSRMLS_CC));
|
||||
csr = NULL;
|
||||
csr = NULL;
|
||||
} else {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error signing request");
|
||||
}
|
||||
@@ -2653,14 +2653,14 @@ static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char *
|
||||
}
|
||||
if (Z_TYPE_PP(val) == IS_ARRAY) {
|
||||
zval ** zphrase;
|
||||
|
||||
|
||||
/* get passphrase */
|
||||
|
||||
if (zend_hash_index_find(HASH_OF(*val), 1, (void **)&zphrase) == FAILURE) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "key array must be of the form array(0 => key, 1 => phrase)");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (Z_TYPE_PP(zphrase) == IS_STRING) {
|
||||
passphrase = Z_STRVAL_PP(zphrase);
|
||||
} else {
|
||||
@@ -2685,7 +2685,7 @@ static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char *
|
||||
if (!what) {
|
||||
TMP_CLEAN;
|
||||
}
|
||||
if (resourceval) {
|
||||
if (resourceval) {
|
||||
*resourceval = Z_LVAL_PP(val);
|
||||
}
|
||||
if (type == le_x509) {
|
||||
@@ -2719,8 +2719,8 @@ static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char *
|
||||
}
|
||||
} else {
|
||||
/* force it to be a string and check if it refers to a file */
|
||||
/* passing non string values leaks, object uses toString, it returns NULL
|
||||
* See bug38255.phpt
|
||||
/* passing non string values leaks, object uses toString, it returns NULL
|
||||
* See bug38255.phpt
|
||||
*/
|
||||
if (!(Z_TYPE_PP(val) == IS_STRING || Z_TYPE_PP(val) == IS_OBJECT)) {
|
||||
TMP_CLEAN;
|
||||
@@ -2794,7 +2794,7 @@ static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req
|
||||
char * randfile = NULL;
|
||||
int egdsocket, seeded;
|
||||
EVP_PKEY * return_val = NULL;
|
||||
|
||||
|
||||
if (req->priv_key_bits < MIN_KEY_LENGTH) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "private key length is too short; it needs to be at least %d bits, not %d",
|
||||
MIN_KEY_LENGTH, req->priv_key_bits);
|
||||
@@ -2803,7 +2803,7 @@ static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req
|
||||
|
||||
randfile = CONF_get_string(req->req_config, req->section_name, "RANDFILE");
|
||||
php_openssl_load_rand_file(randfile, &egdsocket, &seeded TSRMLS_CC);
|
||||
|
||||
|
||||
if ((req->priv_key = EVP_PKEY_new()) != NULL) {
|
||||
switch(req->priv_key_type) {
|
||||
case OPENSSL_KEYTYPE_RSA:
|
||||
@@ -2853,13 +2853,13 @@ static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req
|
||||
}
|
||||
|
||||
php_openssl_write_rand_file(randfile, egdsocket, seeded);
|
||||
|
||||
|
||||
if (return_val == NULL) {
|
||||
EVP_PKEY_free(req->priv_key);
|
||||
req->priv_key = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
return return_val;
|
||||
}
|
||||
/* }}} */
|
||||
@@ -2888,7 +2888,7 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey TSRMLS_DC)
|
||||
case EVP_PKEY_DSA4:
|
||||
assert(pkey->pkey.dsa != NULL);
|
||||
|
||||
if (NULL == pkey->pkey.dsa->p || NULL == pkey->pkey.dsa->q || NULL == pkey->pkey.dsa->priv_key){
|
||||
if (NULL == pkey->pkey.dsa->p || NULL == pkey->pkey.dsa->q || NULL == pkey->pkey.dsa->priv_key){
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
@@ -3019,7 +3019,7 @@ PHP_FUNCTION(openssl_pkey_new)
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PHP_SSL_REQ_INIT(&req);
|
||||
|
||||
@@ -3048,7 +3048,7 @@ PHP_FUNCTION(openssl_pkey_export_to_file)
|
||||
EVP_PKEY * key;
|
||||
BIO * bio_out = NULL;
|
||||
const EVP_CIPHER * cipher;
|
||||
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zp|s!a!", &zpkey, &filename, &filename_len, &passphrase, &passphrase_len, &args) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
@@ -3060,11 +3060,11 @@ PHP_FUNCTION(openssl_pkey_export_to_file)
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get key from parameter 1");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (php_openssl_open_base_dir_chk(filename TSRMLS_CC)) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
||||
PHP_SSL_REQ_INIT(&req);
|
||||
|
||||
if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS) {
|
||||
@@ -3107,7 +3107,7 @@ PHP_FUNCTION(openssl_pkey_export)
|
||||
EVP_PKEY * key;
|
||||
BIO * bio_out = NULL;
|
||||
const EVP_CIPHER * cipher;
|
||||
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zz|s!a!", &zpkey, &out, &passphrase, &passphrase_len, &args) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
@@ -3119,7 +3119,7 @@ PHP_FUNCTION(openssl_pkey_export)
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get key from parameter 1");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
||||
PHP_SSL_REQ_INIT(&req);
|
||||
|
||||
if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS) {
|
||||
@@ -3239,7 +3239,7 @@ PHP_FUNCTION(openssl_pkey_get_details)
|
||||
array_init(return_value);
|
||||
add_assoc_long(return_value, "bits", EVP_PKEY_bits(pkey));
|
||||
add_assoc_stringl(return_value, "key", pbio, pbio_len, 1);
|
||||
/*TODO: Use the real values once the openssl constants are used
|
||||
/*TODO: Use the real values once the openssl constants are used
|
||||
* See the enum at the top of this file
|
||||
*/
|
||||
switch (EVP_PKEY_type(pkey->type)) {
|
||||
@@ -3263,7 +3263,7 @@ PHP_FUNCTION(openssl_pkey_get_details)
|
||||
add_assoc_zval(return_value, "rsa", rsa);
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
case EVP_PKEY_DSA:
|
||||
case EVP_PKEY_DSA2:
|
||||
case EVP_PKEY_DSA3:
|
||||
@@ -3284,7 +3284,7 @@ PHP_FUNCTION(openssl_pkey_get_details)
|
||||
}
|
||||
break;
|
||||
case EVP_PKEY_DH:
|
||||
|
||||
|
||||
ktype = OPENSSL_KEYTYPE_DH;
|
||||
|
||||
if (pkey->pkey.dh != NULL) {
|
||||
@@ -3300,7 +3300,7 @@ PHP_FUNCTION(openssl_pkey_get_details)
|
||||
}
|
||||
|
||||
break;
|
||||
#ifdef EVP_PKEY_EC
|
||||
#ifdef EVP_PKEY_EC
|
||||
case EVP_PKEY_EC:
|
||||
ktype = OPENSSL_KEYTYPE_EC;
|
||||
break;
|
||||
@@ -3334,7 +3334,7 @@ PHP_FUNCTION(openssl_pkcs7_verify)
|
||||
char * extracerts = NULL; int extracerts_len = 0;
|
||||
char * signersfilename = NULL; int signersfilename_len = 0;
|
||||
char * datafilename = NULL; int datafilename_len = 0;
|
||||
|
||||
|
||||
RETVAL_LONG(-1);
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "pl|papp", &filename, &filename_len,
|
||||
@@ -3342,7 +3342,7 @@ PHP_FUNCTION(openssl_pkcs7_verify)
|
||||
&extracerts, &extracerts_len, &datafilename, &datafilename_len) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (extracerts) {
|
||||
others = load_all_certs_from_file(extracerts);
|
||||
if (others == NULL) {
|
||||
@@ -3394,11 +3394,11 @@ PHP_FUNCTION(openssl_pkcs7_verify)
|
||||
|
||||
if (signersfilename) {
|
||||
BIO *certout;
|
||||
|
||||
|
||||
if (php_openssl_open_base_dir_chk(signersfilename TSRMLS_CC)) {
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
|
||||
certout = BIO_new_file(signersfilename, "w");
|
||||
if (certout) {
|
||||
int i;
|
||||
@@ -3447,14 +3447,14 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
|
||||
char * strindex;
|
||||
char * infilename = NULL; int infilename_len;
|
||||
char * outfilename = NULL; int outfilename_len;
|
||||
|
||||
|
||||
RETVAL_FALSE;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ppZa!|ll", &infilename, &infilename_len,
|
||||
&outfilename, &outfilename_len, &zrecipcerts, &zheaders, &flags, &cipherid) == FAILURE)
|
||||
return;
|
||||
|
||||
|
||||
|
||||
if (php_openssl_open_base_dir_chk(infilename TSRMLS_CC) || php_openssl_open_base_dir_chk(outfilename TSRMLS_CC)) {
|
||||
return;
|
||||
}
|
||||
@@ -3465,7 +3465,7 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
|
||||
}
|
||||
|
||||
outfile = BIO_new_file(outfilename, "w");
|
||||
if (outfile == NULL) {
|
||||
if (outfile == NULL) {
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
@@ -3592,12 +3592,12 @@ PHP_FUNCTION(openssl_pkcs7_sign)
|
||||
&extracertsfilename_len) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
RETVAL_FALSE;
|
||||
|
||||
if (extracertsfilename) {
|
||||
others = load_all_certs_from_file(extracertsfilename);
|
||||
if (others == NULL) {
|
||||
if (others == NULL) {
|
||||
goto clean_exit;
|
||||
}
|
||||
}
|
||||
@@ -3708,7 +3708,7 @@ PHP_FUNCTION(openssl_pkcs7_decrypt)
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to get private key");
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
|
||||
if (php_openssl_open_base_dir_chk(infilename TSRMLS_CC) || php_openssl_open_base_dir_chk(outfilename TSRMLS_CC)) {
|
||||
goto clean_exit;
|
||||
}
|
||||
@@ -3727,7 +3727,7 @@ PHP_FUNCTION(openssl_pkcs7_decrypt)
|
||||
if (p7 == NULL) {
|
||||
goto clean_exit;
|
||||
}
|
||||
if (PKCS7_decrypt(p7, key, cert, out, PKCS7_DETACHED)) {
|
||||
if (PKCS7_decrypt(p7, key, cert, out, PKCS7_DETACHED)) {
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
clean_exit:
|
||||
@@ -3760,7 +3760,7 @@ PHP_FUNCTION(openssl_private_encrypt)
|
||||
int data_len;
|
||||
long padding = RSA_PKCS1_PADDING;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szZ|l", &data, &data_len, &crypted, &key, &padding) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szZ|l", &data, &data_len, &crypted, &key, &padding) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
RETVAL_FALSE;
|
||||
@@ -3778,10 +3778,10 @@ PHP_FUNCTION(openssl_private_encrypt)
|
||||
switch (pkey->type) {
|
||||
case EVP_PKEY_RSA:
|
||||
case EVP_PKEY_RSA2:
|
||||
successful = (RSA_private_encrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
cryptedbuf,
|
||||
pkey->pkey.rsa,
|
||||
successful = (RSA_private_encrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
cryptedbuf,
|
||||
pkey->pkey.rsa,
|
||||
padding) == cryptedlen);
|
||||
break;
|
||||
default:
|
||||
@@ -3798,7 +3798,7 @@ PHP_FUNCTION(openssl_private_encrypt)
|
||||
if (cryptedbuf) {
|
||||
efree(cryptedbuf);
|
||||
}
|
||||
if (keyresource == -1) {
|
||||
if (keyresource == -1) {
|
||||
EVP_PKEY_free(pkey);
|
||||
}
|
||||
}
|
||||
@@ -3836,10 +3836,10 @@ PHP_FUNCTION(openssl_private_decrypt)
|
||||
switch (pkey->type) {
|
||||
case EVP_PKEY_RSA:
|
||||
case EVP_PKEY_RSA2:
|
||||
cryptedlen = RSA_private_decrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
crypttemp,
|
||||
pkey->pkey.rsa,
|
||||
cryptedlen = RSA_private_decrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
crypttemp,
|
||||
pkey->pkey.rsa,
|
||||
padding);
|
||||
if (cryptedlen != -1) {
|
||||
cryptedbuf = emalloc(cryptedlen + 1);
|
||||
@@ -3864,7 +3864,7 @@ PHP_FUNCTION(openssl_private_decrypt)
|
||||
if (keyresource == -1) {
|
||||
EVP_PKEY_free(pkey);
|
||||
}
|
||||
if (cryptedbuf) {
|
||||
if (cryptedbuf) {
|
||||
efree(cryptedbuf);
|
||||
}
|
||||
}
|
||||
@@ -3888,7 +3888,7 @@ PHP_FUNCTION(openssl_public_encrypt)
|
||||
return;
|
||||
|
||||
RETVAL_FALSE;
|
||||
|
||||
|
||||
pkey = php_openssl_evp_from_zval(key, 1, NULL, 0, &keyresource TSRMLS_CC);
|
||||
if (pkey == NULL) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "key parameter is not a valid public key");
|
||||
@@ -3901,10 +3901,10 @@ PHP_FUNCTION(openssl_public_encrypt)
|
||||
switch (pkey->type) {
|
||||
case EVP_PKEY_RSA:
|
||||
case EVP_PKEY_RSA2:
|
||||
successful = (RSA_public_encrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
cryptedbuf,
|
||||
pkey->pkey.rsa,
|
||||
successful = (RSA_public_encrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
cryptedbuf,
|
||||
pkey->pkey.rsa,
|
||||
padding) == cryptedlen);
|
||||
break;
|
||||
default:
|
||||
@@ -3947,7 +3947,7 @@ PHP_FUNCTION(openssl_public_decrypt)
|
||||
return;
|
||||
}
|
||||
RETVAL_FALSE;
|
||||
|
||||
|
||||
pkey = php_openssl_evp_from_zval(key, 1, NULL, 0, &keyresource TSRMLS_CC);
|
||||
if (pkey == NULL) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "key parameter is not a valid public key");
|
||||
@@ -3960,10 +3960,10 @@ PHP_FUNCTION(openssl_public_decrypt)
|
||||
switch (pkey->type) {
|
||||
case EVP_PKEY_RSA:
|
||||
case EVP_PKEY_RSA2:
|
||||
cryptedlen = RSA_public_decrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
crypttemp,
|
||||
pkey->pkey.rsa,
|
||||
cryptedlen = RSA_public_decrypt(data_len,
|
||||
(unsigned char *)data,
|
||||
crypttemp,
|
||||
pkey->pkey.rsa,
|
||||
padding);
|
||||
if (cryptedlen != -1) {
|
||||
cryptedbuf = emalloc(cryptedlen + 1);
|
||||
@@ -3971,10 +3971,10 @@ PHP_FUNCTION(openssl_public_decrypt)
|
||||
successful = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "key type not supported in this PHP build!");
|
||||
|
||||
|
||||
}
|
||||
|
||||
efree(crypttemp);
|
||||
@@ -4092,7 +4092,7 @@ PHP_FUNCTION(openssl_verify)
|
||||
char * signature; int signature_len;
|
||||
zval *method = NULL;
|
||||
long signature_algo = OPENSSL_ALGO_SHA1;
|
||||
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssZ|z", &data, &data_len, &signature, &signature_len, &key, &method) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
@@ -4151,7 +4151,7 @@ PHP_FUNCTION(openssl_seal)
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szza/|s", &data, &data_len, &sealdata, &ekeys, &pubkeys, &method, &method_len) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
pubkeysht = HASH_OF(pubkeys);
|
||||
nkeys = pubkeysht ? zend_hash_num_elements(pubkeysht) : 0;
|
||||
if (!nkeys) {
|
||||
@@ -4246,7 +4246,7 @@ clean_exit:
|
||||
if (key_resources[i] == -1) {
|
||||
EVP_PKEY_free(pkeys[i]);
|
||||
}
|
||||
if (eks[i]) {
|
||||
if (eks[i]) {
|
||||
efree(eks[i]);
|
||||
}
|
||||
}
|
||||
@@ -4292,13 +4292,13 @@ PHP_FUNCTION(openssl_open)
|
||||
} else {
|
||||
cipher = EVP_rc4();
|
||||
}
|
||||
|
||||
|
||||
buf = emalloc(data_len + 1);
|
||||
|
||||
if (EVP_OpenInit(&ctx, cipher, (unsigned char *)ekey, ekey_len, NULL, pkey) && EVP_OpenUpdate(&ctx, buf, &len1, (unsigned char *)data, data_len)) {
|
||||
if (!EVP_OpenFinal(&ctx, buf + len1, &len2) || (len1 + len2 == 0)) {
|
||||
efree(buf);
|
||||
if (keyresource == -1) {
|
||||
if (keyresource == -1) {
|
||||
EVP_PKEY_free(pkey);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
@@ -4535,7 +4535,7 @@ SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC) /* {{{
|
||||
if (SSL_CTX_use_PrivateKey_file(ctx, resolved_path_buff, SSL_FILETYPE_PEM) != 1) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set private key file `%s'", resolved_path_buff);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tmpssl = SSL_new(ctx);
|
||||
@@ -4592,7 +4592,7 @@ PHP_FUNCTION(openssl_get_md_methods)
|
||||
}
|
||||
array_init(return_value);
|
||||
OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH,
|
||||
aliases ? openssl_add_method_or_alias: openssl_add_method,
|
||||
aliases ? openssl_add_method_or_alias: openssl_add_method,
|
||||
return_value);
|
||||
}
|
||||
/* }}} */
|
||||
@@ -4608,7 +4608,7 @@ PHP_FUNCTION(openssl_get_cipher_methods)
|
||||
}
|
||||
array_init(return_value);
|
||||
OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH,
|
||||
aliases ? openssl_add_method_or_alias: openssl_add_method,
|
||||
aliases ? openssl_add_method_or_alias: openssl_add_method,
|
||||
return_value);
|
||||
}
|
||||
/* }}} */
|
||||
@@ -4701,7 +4701,7 @@ PHP_FUNCTION(openssl_encrypt)
|
||||
int data_len, method_len, password_len, iv_len = 0, max_iv_len;
|
||||
const EVP_CIPHER *cipher_type;
|
||||
EVP_CIPHER_CTX cipher_ctx;
|
||||
int i, outlen, keylen;
|
||||
int i=0, outlen, keylen;
|
||||
unsigned char *outbuf, *key;
|
||||
zend_bool free_iv;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user