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) {
|