Skip to content

Commit 0b7587f

Browse files
committed
Merge branch 'PHP-8.3'
* PHP-8.3: random/standard: Adjust #13138 for PHP 8.3 random/standard: Correctly handle broken engines in php_array_pick_keys (#13138)
2 parents d463d21 + 00ea756 commit 0b7587f

File tree

4 files changed

+392
-1
lines changed

4 files changed

+392
-1
lines changed

ext/random/tests/03_randomizer/engine_unsafe_biased.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ try {
4343
echo $e->getMessage(), PHP_EOL;
4444
}
4545

46+
try {
47+
var_dump(randomizer()->pickArrayKeys(range(1, 1234), 1));
48+
} catch (Random\BrokenRandomEngineError $e) {
49+
echo $e->getMessage(), PHP_EOL;
50+
}
51+
52+
try {
53+
var_dump(randomizer()->pickArrayKeys(range(1, 1234), 10));
54+
} catch (Random\BrokenRandomEngineError $e) {
55+
echo $e->getMessage(), PHP_EOL;
56+
}
57+
4658
try {
4759
var_dump(randomizer()->shuffleBytes('foobar'));
4860
} catch (Random\BrokenRandomEngineError $e) {
@@ -70,3 +82,5 @@ Failed to generate an acceptable random number in 50 attempts
7082
Failed to generate an acceptable random number in 50 attempts
7183
Failed to generate an acceptable random number in 50 attempts
7284
Failed to generate an acceptable random number in 50 attempts
85+
Failed to generate an acceptable random number in 50 attempts
86+
Failed to generate an acceptable random number in 50 attempts

ext/random/tests/03_randomizer/engine_unsafe_empty_string.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ try {
4343
echo $e->getMessage(), PHP_EOL;
4444
}
4545

46+
try {
47+
var_dump(randomizer()->pickArrayKeys(range(1, 1234), 1));
48+
} catch (Random\BrokenRandomEngineError $e) {
49+
echo $e->getMessage(), PHP_EOL;
50+
}
51+
52+
try {
53+
var_dump(randomizer()->pickArrayKeys(range(1, 1234), 10));
54+
} catch (Random\BrokenRandomEngineError $e) {
55+
echo $e->getMessage(), PHP_EOL;
56+
}
57+
4658
try {
4759
var_dump(randomizer()->shuffleBytes('foobar'));
4860
} catch (Random\BrokenRandomEngineError $e) {
@@ -70,3 +82,5 @@ A random engine must return a non-empty string
7082
A random engine must return a non-empty string
7183
A random engine must return a non-empty string
7284
A random engine must return a non-empty string
85+
A random engine must return a non-empty string
86+
A random engine must return a non-empty string
Lines changed: 336 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,336 @@
1+
--TEST--
2+
Random: Randomizer: Nul engines are correctly handled
3+
--FILE--
4+
<?php
5+
6+
use Random\Engine;
7+
use Random\Randomizer;
8+
9+
final class NulEngine implements Engine
10+
{
11+
public function generate(): string
12+
{
13+
return str_repeat("\x00", PHP_INT_SIZE);
14+
}
15+
}
16+
17+
function randomizer(): Randomizer
18+
{
19+
return new Randomizer(new NulEngine());
20+
}
21+
22+
try {
23+
var_dump(randomizer()->getInt(0, 1234));
24+
} catch (Random\BrokenRandomEngineError $e) {
25+
echo $e->getMessage(), PHP_EOL;
26+
}
27+
28+
try {
29+
var_dump(randomizer()->nextInt());
30+
} catch (Random\BrokenRandomEngineError $e) {
31+
echo $e->getMessage(), PHP_EOL;
32+
}
33+
34+
try {
35+
var_dump(bin2hex(randomizer()->getBytes(1)));
36+
} catch (Random\BrokenRandomEngineError $e) {
37+
echo $e->getMessage(), PHP_EOL;
38+
}
39+
40+
try {
41+
var_dump(randomizer()->shuffleArray(range(1, 123)));
42+
} catch (Random\BrokenRandomEngineError $e) {
43+
echo $e->getMessage(), PHP_EOL;
44+
}
45+
46+
try {
47+
var_dump(randomizer()->pickArrayKeys(range(1, 123), 1));
48+
} catch (Random\BrokenRandomEngineError $e) {
49+
echo $e->getMessage(), PHP_EOL;
50+
}
51+
52+
try {
53+
var_dump(randomizer()->pickArrayKeys(range(1, 123), 10));
54+
} catch (Random\BrokenRandomEngineError $e) {
55+
echo $e->getMessage(), PHP_EOL;
56+
}
57+
58+
try {
59+
var_dump(randomizer()->shuffleBytes('foobar'));
60+
} catch (Random\BrokenRandomEngineError $e) {
61+
echo $e->getMessage(), PHP_EOL;
62+
}
63+
64+
try {
65+
var_dump(randomizer()->getBytesFromString('123', 10));
66+
} catch (Random\BrokenRandomEngineError $e) {
67+
echo $e->getMessage(), PHP_EOL;
68+
}
69+
70+
try {
71+
var_dump(randomizer()->getBytesFromString(str_repeat('a', 500), 10));
72+
} catch (Random\BrokenRandomEngineError $e) {
73+
echo $e->getMessage(), PHP_EOL;
74+
}
75+
76+
?>
77+
--EXPECTF--
78+
int(0)
79+
int(0)
80+
string(2) "00"
81+
array(123) {
82+
[0]=>
83+
int(2)
84+
[1]=>
85+
int(3)
86+
[2]=>
87+
int(4)
88+
[3]=>
89+
int(5)
90+
[4]=>
91+
int(6)
92+
[5]=>
93+
int(7)
94+
[6]=>
95+
int(8)
96+
[7]=>
97+
int(9)
98+
[8]=>
99+
int(10)
100+
[9]=>
101+
int(11)
102+
[10]=>
103+
int(12)
104+
[11]=>
105+
int(13)
106+
[12]=>
107+
int(14)
108+
[13]=>
109+
int(15)
110+
[14]=>
111+
int(16)
112+
[15]=>
113+
int(17)
114+
[16]=>
115+
int(18)
116+
[17]=>
117+
int(19)
118+
[18]=>
119+
int(20)
120+
[19]=>
121+
int(21)
122+
[20]=>
123+
int(22)
124+
[21]=>
125+
int(23)
126+
[22]=>
127+
int(24)
128+
[23]=>
129+
int(25)
130+
[24]=>
131+
int(26)
132+
[25]=>
133+
int(27)
134+
[26]=>
135+
int(28)
136+
[27]=>
137+
int(29)
138+
[28]=>
139+
int(30)
140+
[29]=>
141+
int(31)
142+
[30]=>
143+
int(32)
144+
[31]=>
145+
int(33)
146+
[32]=>
147+
int(34)
148+
[33]=>
149+
int(35)
150+
[34]=>
151+
int(36)
152+
[35]=>
153+
int(37)
154+
[36]=>
155+
int(38)
156+
[37]=>
157+
int(39)
158+
[38]=>
159+
int(40)
160+
[39]=>
161+
int(41)
162+
[40]=>
163+
int(42)
164+
[41]=>
165+
int(43)
166+
[42]=>
167+
int(44)
168+
[43]=>
169+
int(45)
170+
[44]=>
171+
int(46)
172+
[45]=>
173+
int(47)
174+
[46]=>
175+
int(48)
176+
[47]=>
177+
int(49)
178+
[48]=>
179+
int(50)
180+
[49]=>
181+
int(51)
182+
[50]=>
183+
int(52)
184+
[51]=>
185+
int(53)
186+
[52]=>
187+
int(54)
188+
[53]=>
189+
int(55)
190+
[54]=>
191+
int(56)
192+
[55]=>
193+
int(57)
194+
[56]=>
195+
int(58)
196+
[57]=>
197+
int(59)
198+
[58]=>
199+
int(60)
200+
[59]=>
201+
int(61)
202+
[60]=>
203+
int(62)
204+
[61]=>
205+
int(63)
206+
[62]=>
207+
int(64)
208+
[63]=>
209+
int(65)
210+
[64]=>
211+
int(66)
212+
[65]=>
213+
int(67)
214+
[66]=>
215+
int(68)
216+
[67]=>
217+
int(69)
218+
[68]=>
219+
int(70)
220+
[69]=>
221+
int(71)
222+
[70]=>
223+
int(72)
224+
[71]=>
225+
int(73)
226+
[72]=>
227+
int(74)
228+
[73]=>
229+
int(75)
230+
[74]=>
231+
int(76)
232+
[75]=>
233+
int(77)
234+
[76]=>
235+
int(78)
236+
[77]=>
237+
int(79)
238+
[78]=>
239+
int(80)
240+
[79]=>
241+
int(81)
242+
[80]=>
243+
int(82)
244+
[81]=>
245+
int(83)
246+
[82]=>
247+
int(84)
248+
[83]=>
249+
int(85)
250+
[84]=>
251+
int(86)
252+
[85]=>
253+
int(87)
254+
[86]=>
255+
int(88)
256+
[87]=>
257+
int(89)
258+
[88]=>
259+
int(90)
260+
[89]=>
261+
int(91)
262+
[90]=>
263+
int(92)
264+
[91]=>
265+
int(93)
266+
[92]=>
267+
int(94)
268+
[93]=>
269+
int(95)
270+
[94]=>
271+
int(96)
272+
[95]=>
273+
int(97)
274+
[96]=>
275+
int(98)
276+
[97]=>
277+
int(99)
278+
[98]=>
279+
int(100)
280+
[99]=>
281+
int(101)
282+
[100]=>
283+
int(102)
284+
[101]=>
285+
int(103)
286+
[102]=>
287+
int(104)
288+
[103]=>
289+
int(105)
290+
[104]=>
291+
int(106)
292+
[105]=>
293+
int(107)
294+
[106]=>
295+
int(108)
296+
[107]=>
297+
int(109)
298+
[108]=>
299+
int(110)
300+
[109]=>
301+
int(111)
302+
[110]=>
303+
int(112)
304+
[111]=>
305+
int(113)
306+
[112]=>
307+
int(114)
308+
[113]=>
309+
int(115)
310+
[114]=>
311+
int(116)
312+
[115]=>
313+
int(117)
314+
[116]=>
315+
int(118)
316+
[117]=>
317+
int(119)
318+
[118]=>
319+
int(120)
320+
[119]=>
321+
int(121)
322+
[120]=>
323+
int(122)
324+
[121]=>
325+
int(123)
326+
[122]=>
327+
int(1)
328+
}
329+
array(1) {
330+
[0]=>
331+
int(0)
332+
}
333+
Failed to generate an acceptable random number in 50 attempts
334+
string(6) "oobarf"
335+
string(10) "1111111111"
336+
string(10) "aaaaaaaaaa"

0 commit comments

Comments
 (0)