Skip to content

Commit f2f070a

Browse files
committed
Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2: random/standard: Correctly handle broken engines in php_array_pick_keys (#13138)
2 parents 7065fe3 + 97c6da1 commit f2f070a

File tree

5 files changed

+383
-1
lines changed

5 files changed

+383
-1
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ PHP NEWS
1313
- Phar:
1414
. Fixed bug #71465 (PHAR doesn't know about litespeed). (nielsdos)
1515

16+
- Random:
17+
. Fixed bug GH-13138 (Randomizer::pickArrayKeys() does not detect broken
18+
engines). (timwolla)
19+
1620
- Standard:
1721
. Fixed bug GH-13094 (range(9.9, '0') causes segmentation fault). (nielsdos)
1822

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

0 commit comments

Comments
 (0)