summaryrefslogtreecommitdiff
path: root/ext/openssl
diff options
context:
space:
mode:
authorSean Finney <seanius@debian.org>2009-04-10 14:09:48 +0200
committerSean Finney <seanius@debian.org>2009-04-10 14:09:48 +0200
commitcd0b49c72aee33b3e44a9c589fcd93b9e1c7a64f (patch)
tree1315c623bb7d9dfa8d366fa9cd2c6834ceeb5da5 /ext/openssl
parent9ea47aab740772adf0c69d8c94b208a464e599ea (diff)
downloadphp-cd0b49c72aee33b3e44a9c589fcd93b9e1c7a64f.tar.gz
Imported Upstream version 5.2.9.dfsg.1upstream/5.2.9.dfsg.1
Diffstat (limited to 'ext/openssl')
-rw-r--r--ext/openssl/openssl.c72
-rw-r--r--ext/openssl/php_openssl.h4
-rw-r--r--ext/openssl/tests/bug41033.pem12
-rw-r--r--ext/openssl/tests/bug41033.phpt27
-rw-r--r--ext/openssl/tests/bug41033pub.pem12
-rw-r--r--ext/openssl/tests/bug46127.pem33
-rw-r--r--ext/openssl/tests/bug46127.phpt58
-rw-r--r--ext/openssl/xp_ssl.c29
8 files changed, 206 insertions, 41 deletions
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index 516ff1748..52627ad4c 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: openssl.c,v 1.98.2.5.2.45 2008/04/07 10:44:03 tony2001 Exp $ */
+/* $Id: openssl.c,v 1.98.2.5.2.51 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -56,6 +56,7 @@
#define OPENSSL_ALGO_MD5 2
#define OPENSSL_ALGO_MD4 3
#define OPENSSL_ALGO_MD2 4
+#define OPENSSL_ALGO_DSS1 5
#define DEBUG_SMIME 0
@@ -641,6 +642,9 @@ static EVP_MD * php_openssl_get_evp_md_from_algo(long algo) { /* {{{ */
case OPENSSL_ALGO_MD2:
mdtype = (EVP_MD *) EVP_md2();
break;
+ case OPENSSL_ALGO_DSS1:
+ mdtype = (EVP_MD *) EVP_dss1();
+ break;
default:
return NULL;
break;
@@ -692,6 +696,7 @@ PHP_MINIT_FUNCTION(openssl)
REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD5", OPENSSL_ALGO_MD5, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD4", OPENSSL_ALGO_MD4, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD2", OPENSSL_ALGO_MD2, CONST_CS|CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("OPENSSL_ALGO_DSS1", OPENSSL_ALGO_DSS1, CONST_CS|CONST_PERSISTENT);
/* flags for S/MIME */
REGISTER_LONG_CONSTANT("PKCS7_DETACHED", PKCS7_DETACHED, CONST_CS|CONST_PERSISTENT);
@@ -1200,7 +1205,7 @@ PHP_FUNCTION(openssl_x509_checkpurpose)
STACK_OF(X509) * untrustedchain = NULL;
long purpose;
char * untrusted = NULL;
- int untrusted_len;
+ int untrusted_len, ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl|a!s", &zcert, &purpose, &zcainfo, &untrusted, &untrusted_len)
== FAILURE) {
@@ -1224,7 +1229,15 @@ PHP_FUNCTION(openssl_x509_checkpurpose)
if (cert == NULL) {
goto clean_exit;
}
- RETVAL_LONG(check_cert(cainfo, cert, untrustedchain, purpose));
+
+ ret = check_cert(cainfo, cert, untrustedchain, purpose);
+
+ if (ret != 0 && ret != 1) {
+ RETVAL_LONG(ret);
+ } else {
+ RETVAL_BOOL(ret);
+ }
+
clean_exit:
if (certresource == 1 && cert) {
@@ -2086,7 +2099,7 @@ cleanup:
}
/* }}} */
-/* {{{ proto bool openssl_csr_new(array dn, resource &privkey [, array configargs, array extraattribs])
+/* {{{ proto bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])
Generates a privkey and CSR */
PHP_FUNCTION(openssl_csr_new)
{
@@ -3010,7 +3023,7 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
}
}
- BIO_reset(infile);
+ (void)BIO_reset(infile);
/* write the encrypted data */
SMIME_write_PKCS7(outfile, p7, infile, flags);
@@ -3099,7 +3112,7 @@ PHP_FUNCTION(openssl_pkcs7_sign)
goto clean_exit;
}
- BIO_reset(infile);
+ (void)BIO_reset(infile);
/* tack on extra headers */
if (zheaders) {
@@ -3522,7 +3535,9 @@ PHP_FUNCTION(openssl_sign)
efree(sigbuf);
RETVAL_FALSE;
}
+#if OPENSSL_VERSION_NUMBER >= 0x0090700fL
EVP_MD_CTX_cleanup(&md_ctx);
+#endif
if (keyresource == -1) {
EVP_PKEY_free(pkey);
}
@@ -3562,7 +3577,9 @@ PHP_FUNCTION(openssl_verify)
EVP_VerifyInit (&md_ctx, mdtype);
EVP_VerifyUpdate (&md_ctx, data, data_len);
err = EVP_VerifyFinal (&md_ctx, (unsigned char *)signature, signature_len, pkey);
+#if OPENSSL_VERSION_NUMBER >= 0x0090700fL
EVP_MD_CTX_cleanup(&md_ctx);
+#endif
if (keyresource == -1) {
EVP_PKEY_free(pkey);
@@ -3918,30 +3935,33 @@ SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC) /* {{{
X509 *cert = NULL;
EVP_PKEY *key = NULL;
SSL *tmpssl;
+ char resolved_path_buff[MAXPATHLEN];
- /* a certificate to use for authentication */
- if (SSL_CTX_use_certificate_chain_file(ctx, certfile) != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set local cert chain file `%s'; Check that your cafile/capath settings include details of your certificate and its issuer", certfile);
- return NULL;
- }
+ if (VCWD_REALPATH(certfile, resolved_path_buff)) {
+ /* a certificate to use for authentication */
+ if (SSL_CTX_use_certificate_chain_file(ctx, resolved_path_buff) != 1) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set local cert chain file `%s'; Check that your cafile/capath settings include details of your certificate and its issuer", certfile);
+ return NULL;
+ }
- if (SSL_CTX_use_PrivateKey_file(ctx, certfile, SSL_FILETYPE_PEM) != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set private key file `%s'", certfile);
- return NULL;
- }
+ 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);
- cert = SSL_get_certificate(tmpssl);
+ tmpssl = SSL_new(ctx);
+ cert = SSL_get_certificate(tmpssl);
- if (cert) {
- key = X509_get_pubkey(cert);
- EVP_PKEY_copy_parameters(key, SSL_get_privatekey(tmpssl));
- EVP_PKEY_free(key);
- }
- SSL_free(tmpssl);
+ if (cert) {
+ key = X509_get_pubkey(cert);
+ EVP_PKEY_copy_parameters(key, SSL_get_privatekey(tmpssl));
+ EVP_PKEY_free(key);
+ }
+ SSL_free(tmpssl);
- if (!SSL_CTX_check_private_key(ctx)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Private key does not match certificate!");
+ if (!SSL_CTX_check_private_key(ctx)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Private key does not match certificate!");
+ }
}
}
if (ok) {
diff --git a/ext/openssl/php_openssl.h b/ext/openssl/php_openssl.h
index 83a42867e..e7448f731 100644
--- a/ext/openssl/php_openssl.h
+++ b/ext/openssl/php_openssl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_openssl.h,v 1.16.2.1.2.5 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_openssl.h,v 1.16.2.1.2.6 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_OPENSSL_H
#define PHP_OPENSSL_H
diff --git a/ext/openssl/tests/bug41033.pem b/ext/openssl/tests/bug41033.pem
new file mode 100644
index 000000000..4ae74b9a5
--- /dev/null
+++ b/ext/openssl/tests/bug41033.pem
@@ -0,0 +1,12 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBuwIBAAKBgQCrQ/By/Y5OQRmmc/e+W+eFVoeR5y8WPOkykwS2hc21aSNY5X3q
+8ZHdV467thFd/QCoR55hHTRGRbYmfOkXSiscotU08ISlxIH39EEhFSzwqzkxFfak
+cgHEu41AUOIfJ2Dz+vcmuasME159pDP0d0gt55pKRPcXoh916p2VS/FBiQIVAMnQ
+C6W+K1brelHqpUqwQ1cdNJklAoGAN858gG/UIF+U3CYTcgl5/OUAqOzvitMV2ue+
+AkDEkGNEZs3KUAjpqHduf1E3znl7hJJIRr+33sul9USxn0vczDBkEJPralQjNX2C
+dnYKDDhJ+UKlAFG2JZint4CBKPFiZC0tVo04iDQQUUfDC4c8K3cS5uzypebJyoLo
+e5b8rScCgYBedJg6vklhMWv2wZD10hbQaXEX5r8T6EQujbfO0RcKpuaJziPPrXO8
+QwPtLt0f40yjTmPxN3LcpgMymiun9UCSTZ3MhVKekCmSNzs5+lQpCm1VlDrCg+jn
+djw0VCX8Cm0lOPIyQ4eCNAB6nQLtBnXFWaqYuUS8iVDE7wmT0iwnkAIVAMKogWVA
+ZOKwjTj9Yztv3lGj7VTa
+-----END DSA PRIVATE KEY-----
diff --git a/ext/openssl/tests/bug41033.phpt b/ext/openssl/tests/bug41033.phpt
new file mode 100644
index 000000000..4aeae66f4
--- /dev/null
+++ b/ext/openssl/tests/bug41033.phpt
@@ -0,0 +1,27 @@
+--TEST--
+#41033, enable signing with DSA keys
+--SKIPIF--
+<?php
+if (!extension_loaded("openssl")) die("skip, openssl required");
+if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
+?>
+--FILE--
+<?php
+$prv = 'file://' . dirname(__FILE__) . '/' . 'bug41033.pem';
+$pub = 'file://' . dirname(__FILE__) . '/' . 'bug41033pub.pem';
+
+
+$prkeyid = openssl_get_privatekey($prv, "1234");
+$ct = "Hello I am some text!";
+openssl_sign($ct, $signature, $prkeyid, OPENSSL_ALGO_DSS1);
+echo "Signature: ".base64_encode($signature) . "\n";
+
+$pukeyid = openssl_get_publickey($pub);
+$valid = openssl_verify($ct, $signature, $pukeyid, OPENSSL_ALGO_DSS1);
+echo "Signature validity: " . $valid . "\n";
+
+
+?>
+--EXPECTF--
+Signature: %s
+Signature validity: 1
diff --git a/ext/openssl/tests/bug41033pub.pem b/ext/openssl/tests/bug41033pub.pem
new file mode 100644
index 000000000..0d4ab27ff
--- /dev/null
+++ b/ext/openssl/tests/bug41033pub.pem
@@ -0,0 +1,12 @@
+-----BEGIN PUBLIC KEY-----
+MIIBtjCCASsGByqGSM44BAEwggEeAoGBAKtD8HL9jk5BGaZz975b54VWh5HnLxY8
+6TKTBLaFzbVpI1jlferxkd1Xjru2EV39AKhHnmEdNEZFtiZ86RdKKxyi1TTwhKXE
+gff0QSEVLPCrOTEV9qRyAcS7jUBQ4h8nYPP69ya5qwwTXn2kM/R3SC3nmkpE9xei
+H3XqnZVL8UGJAhUAydALpb4rVut6UeqlSrBDVx00mSUCgYA3znyAb9QgX5TcJhNy
+CXn85QCo7O+K0xXa574CQMSQY0RmzcpQCOmod25/UTfOeXuEkkhGv7fey6X1RLGf
+S9zMMGQQk+tqVCM1fYJ2dgoMOEn5QqUAUbYlmKe3gIEo8WJkLS1WjTiINBBRR8ML
+hzwrdxLm7PKl5snKguh7lvytJwOBhAACgYBedJg6vklhMWv2wZD10hbQaXEX5r8T
+6EQujbfO0RcKpuaJziPPrXO8QwPtLt0f40yjTmPxN3LcpgMymiun9UCSTZ3MhVKe
+kCmSNzs5+lQpCm1VlDrCg+jndjw0VCX8Cm0lOPIyQ4eCNAB6nQLtBnXFWaqYuUS8
+iVDE7wmT0iwnkA==
+-----END PUBLIC KEY-----
diff --git a/ext/openssl/tests/bug46127.pem b/ext/openssl/tests/bug46127.pem
new file mode 100644
index 000000000..9d754d460
--- /dev/null
+++ b/ext/openssl/tests/bug46127.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIC5jCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJBVTET
+MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
+HDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0IGJpdCkwHhcNOTkxMjAyMjEzNTQ4WhcN
+MDUwNzExMjEzNTQ4WjBcMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFu
+ZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxHDAaBgNVBAMTE1Rlc3QgUENB
+ICgxMDI0IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJ2haT/f5Zwy
+V+MiuSDjSR62adBoSiBB7Usty44lXqsp9RICw+DCCxpsn/CfxPEDXLLd4olsWXc6
+JRcxGynbYmnzk+Z6aIPPJQhK3CTvaqGnWKZsA1m+WaUIUqJCuNTK4N+7hMAGaf6S
+S3e9HVgEQ4a34gXJ7VQFVIBNV1EnZRWHAgMBAAGjgbcwgbQwHQYDVR0OBBYEFE0R
+aEcrj18q1dw+G6nJbsTWR213MIGEBgNVHSMEfTB7gBRNEWhHK49fKtXcPhupyW7E
+1kdtd6FgpF4wXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
+BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
+NCBiaXQpggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAUa8B3pho
++Mvxeq9HsEzJxHIFQla05S5J/e/V+DQTYoKiRFchKPrDAdrzYSEvP3h4QJEtsNqQ
+JfOxg5M42uLFq7aPGWkF6ZZqZsYS+zA9IVT14g7gNA6Ne+5QtJqQtH9HA24st0T0
+Tga/lZ9M2ovImovaxSL/kRHbpCWcqWVxpOw=
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
+wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
+vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
+AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
+z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
+xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
+HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
+yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
+xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
+7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
+h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
+QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
+hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
+-----END RSA PRIVATE KEY-----
diff --git a/ext/openssl/tests/bug46127.phpt b/ext/openssl/tests/bug46127.phpt
new file mode 100644
index 000000000..a70a5d490
--- /dev/null
+++ b/ext/openssl/tests/bug46127.phpt
@@ -0,0 +1,58 @@
+--TEST--
+#46127, openssl_sign/verify: accept different algos
+--SKIPIF--
+<?php
+if (!extension_loaded("openssl")) die("skip, openssl required");
+if (!extension_loaded("pcntl")) die("skip, pcntl required");
+if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
+?>
+--FILE--
+<?php
+
+function ssl_server($port) {
+ $pem = dirname(__FILE__) . '/bug46127.pem';
+ $ssl = array(
+ 'verify_peer' => false,
+ 'allow_self_signed' => true,
+ 'local_cert' => $pem,
+ // 'passphrase' => '',
+ );
+ $context = stream_context_create(array('ssl' => $ssl));
+ $sock = stream_socket_server('ssl://127.0.0.1:'.$port, $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context);
+ if (!$sock) return false;
+
+ $link = stream_socket_accept($sock);
+ if (!$link) return false; // bad link?
+
+ fputs($link, "Sending bug 46127\n");
+
+ // close stuff
+ fclose($link);
+ fclose($sock);
+
+ exit;
+}
+
+echo "Running bug46127\n";
+
+$port = rand(15000, 32000);
+
+$pid = pcntl_fork();
+if ($pid == 0) { // child
+ ssl_server($port);
+ exit;
+}
+
+// client or failed
+sleep(1);
+$sock = fsockopen('ssl://127.0.0.1', $port, $errno, $errstr);
+if (!$sock) exit;
+
+echo fgets($sock);
+
+pcntl_waitpid($pid, $status);
+
+?>
+--EXPECTF--
+Running bug46127
+Sending bug 46127
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index fc29a82b6..c31a5052f 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xp_ssl.c,v 1.22.2.3.2.11 2008/04/08 14:11:49 jorton Exp $ */
+/* $Id: xp_ssl.c,v 1.22.2.3.2.16 2008/12/31 11:17:41 sebastian Exp $ */
#include "php.h"
#include "ext/standard/file.h"
@@ -152,9 +152,10 @@ static int handle_ssl_error(php_stream *stream, int nr_bytes, zend_bool is_init
ERR_error_string_n(ecode, esbuf, sizeof(esbuf) - 1);
}
code = strlen(esbuf);
- esbuf[code] = '\0';
ebuf = erealloc(ebuf, ebuf_size + code + 1);
+ ebuf_size += code;
+
if (wptr == NULL) {
wptr = ebuf;
}
@@ -198,14 +199,13 @@ static size_t php_openssl_sockop_write(php_stream *stream, const char *buf, size
break;
}
} while(retry);
-
+
+ if (didwrite > 0) {
+ php_stream_notify_progress_increment(stream->context, didwrite, 0);
+ }
} else {
didwrite = php_stream_socket_ops.write(stream, buf, count TSRMLS_CC);
}
-
- if (didwrite > 0) {
- php_stream_notify_progress_increment(stream->context, didwrite, 0);
- }
if (didwrite < 0) {
didwrite = 0;
@@ -234,16 +234,16 @@ static size_t php_openssl_sockop_read(php_stream *stream, char *buf, size_t coun
break;
}
} while (retry);
+
+ if (nr_bytes > 0) {
+ php_stream_notify_progress_increment(stream->context, nr_bytes, 0);
+ }
}
else
{
nr_bytes = php_stream_socket_ops.read(stream, buf, count TSRMLS_CC);
}
- if (nr_bytes > 0) {
- php_stream_notify_progress_increment(stream->context, nr_bytes, 0);
- }
-
if (nr_bytes < 0) {
nr_bytes = 0;
}
@@ -418,7 +418,7 @@ static inline int php_openssl_enable_crypto(php_stream *stream,
n = SSL_connect(sslsock->ssl_handle);
gettimeofday(&tve, &tz);
- timeout -= (tve.tv_sec + tve.tv_usec / 1000000) - (tvs.tv_sec + tvs.tv_usec / 1000000);
+ timeout -= (tve.tv_sec + (float) tve.tv_usec / 1000000) - (tvs.tv_sec + (float) tvs.tv_usec / 1000000);
if (timeout < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL: connection timeout");
return -1;
@@ -558,6 +558,9 @@ static inline int php_openssl_tcp_sockop_accept(php_stream *stream, php_openssl_
xparam->outputs.client = php_stream_alloc_rel(stream->ops, clisockdata, NULL, "r+");
if (xparam->outputs.client) {
xparam->outputs.client->context = stream->context;
+ if (stream->context) {
+ zend_list_addref(stream->context->rsrc_id);
+ }
}
}