summaryrefslogtreecommitdiffstats
path: root/redis-upstream.patch
blob: 03bd34f47d7475aeee10096c462b6f93b5b76ee9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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) {