summaryrefslogtreecommitdiffstats
path: root/redis-upstream.patch
diff options
context:
space:
mode:
Diffstat (limited to 'redis-upstream.patch')
-rw-r--r--redis-upstream.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/redis-upstream.patch b/redis-upstream.patch
new file mode 100644
index 0000000..03bd34f
--- /dev/null
+++ b/redis-upstream.patch
@@ -0,0 +1,116 @@
+From a51215ce2b22bcd1f506780c35b6833471e0b8cb Mon Sep 17 00:00:00 2001
+From: michael-grunder <michael.grunder@gmail.com>
+Date: Mon, 18 Mar 2024 14:42:35 -0700
+Subject: [PATCH] Update random includes.
+
+PHP 8.4 has some breaking changes with respect to where PHP's random methods and
+helpers are. This commit fixes those issues while staying backward compatible.
+
+Fixes #2463
+---
+ backoff.c | 12 ++++++------
+ library.c | 7 ++++++-
+ redis.c | 6 +++++-
+ 3 files changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/backoff.c b/backoff.c
+index d0961fcfaf..1be04a8fe8 100644
+--- a/backoff.c
++++ b/backoff.c
+@@ -1,14 +1,14 @@
+ #include "common.h"
+
++#if PHP_VERSION_ID < 80400
+ #include <ext/standard/php_rand.h>
+-
+-#if PHP_VERSION_ID >= 70100
+-#include <ext/standard/php_mt_rand.h>
+ #else
++#include <ext/random/php_random.h>
++#endif
++
++#if PHP_VERSION_ID < 70100
+ static zend_long php_mt_rand_range(zend_long min, zend_long max) {
+- zend_long number = php_rand();
+- RAND_RANGE(number, min, max, PHP_RAND_MAX);
+- return number;
++ return min + php_rand() % (max - min + 1)
+ }
+ #endif
+
+diff --git a/library.c b/library.c
+index 3d65c8529d..f81556a9ed 100644
+--- a/library.c
++++ b/library.c
+@@ -56,9 +56,14 @@
+ #include <ext/json/php_json.h>
+ #endif
+
+-#include <ext/standard/php_rand.h>
+ #include <ext/hash/php_hash.h>
+
++#if PHP_VERSION_ID < 80400
++#include <ext/standard/php_rand.h>
++#else
++#include <ext/random/php_random.h>
++#endif
++
+ #define UNSERIALIZE_NONE 0
+ #define UNSERIALIZE_KEYS 1
+ #define UNSERIALIZE_VALS 2
+diff --git a/redis.c b/redis.c
+index ec6f65d2ed..2330bf7edf 100644
+--- a/redis.c
++++ b/redis.c
+@@ -27,12 +27,16 @@
+ #include "redis_cluster.h"
+ #include "redis_commands.h"
+ #include "redis_sentinel.h"
+-#include <standard/php_random.h>
+ #include <ext/spl/spl_exceptions.h>
+ #include <zend_exceptions.h>
+ #include <ext/standard/info.h>
+ #include <ext/hash/php_hash.h>
+
++#if PHP_VERSION_ID < 80400
++#include <ext/standard/php_random.h>
++#else
++#include <ext/random/php_random.h>
++#endif
+
+ #ifdef PHP_SESSION
+ #include <ext/session/php_session.h>
+From c139de3abac1dd33b97ef0de5af41b6e3a78f7ab Mon Sep 17 00:00:00 2001
+From: michael-grunder <michael.grunder@gmail.com>
+Date: Sat, 1 Jun 2024 13:09:30 -0700
+Subject: [PATCH] We don't need to use a ranom value for our ECHO liveness
+ challenge.
+
+A microsecond resolution timestamp combined with a monotonically
+incremented counter should be sufficient.
+
+This also fixes PHP 8.4 compilation as PHP 8.4 doesn't seem to have
+`php_rand()`.
+---
+ library.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/library.c b/library.c
+index ce0cbda26..42a132c4c 100644
+--- a/library.c
++++ b/library.c
+@@ -2886,11 +2886,13 @@ redis_sock_create(char *host, int host_len, int port,
+ }
+
+ static int redis_uniqid(char *buf, size_t buflen) {
++ static unsigned long counter = 0;
+ struct timeval tv;
++
+ gettimeofday(&tv, NULL);
+
+ return snprintf(buf, buflen, "phpredis:%08lx%05lx:%08lx",
+- (long)tv.tv_sec, (long)tv.tv_usec, (long)php_rand());
++ (long)tv.tv_sec, (long)tv.tv_usec, counter++);
+ }
+
+ static int redis_stream_liveness_check(php_stream *stream) {