diff options
author | Joe Cai <joe.cai@bigcommerce.com> | 2020-04-20 09:03:11 +1000 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-04-20 10:25:54 +0200 |
commit | 94e09bfe558656d3f1470dc960b900a951b0dffc (patch) | |
tree | 672e81c0aacc70987f934e34e7857a0788b1962c | |
parent | d31ccb5fc8a0f6f5fded085ee170c8bd99eb83e7 (diff) | |
download | php-git-94e09bfe558656d3f1470dc960b900a951b0dffc.tar.gz |
Fix #79497: Fix php_openssl_subtract_timeval()
I stumbled upon this while debugging a strange issue with
stream_socket_client() where it randomly throws out errors when
the connection timeout is set to below 1s. The logic to calculate
time difference in php_openssl_subtract_timeval() is wrong when
a.tv_usec < b.tv_usec, causing connection errors before the timeout
is reached.
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/openssl/xp_ssl.c | 4 |
2 files changed, 6 insertions, 2 deletions
@@ -15,6 +15,10 @@ PHP NEWS . Fixed bug #79441 (Segfault in mb_chr() if internal encoding is unsupported). (Girgias) +- OpenSSL: + . Fixed bug #79497 (stream_socket_client() throws an unknown error sometimes + with <1s timeout). (Joe Cai) + - Standard: . Fixed bug #79468 (SIGSEGV when closing stream handle with a stream filter appended). (dinosaur) diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index 88d86c2096..ea29a34058 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -2209,8 +2209,8 @@ static struct timeval php_openssl_subtract_timeval(struct timeval a, struct time difference.tv_usec = a.tv_usec - b.tv_usec; if (a.tv_usec < b.tv_usec) { - b.tv_sec -= 1L; - b.tv_usec += 1000000L; + difference.tv_sec -= 1L; + difference.tv_usec += 1000000L; } return difference; |