mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00

`/./` matches all characters but newlines, so if `random_bytes` generates a string with newlines in it, the resulting string is not empty. Fix this by adding the `s` modifier.
87 lines
2.2 KiB
PHP
87 lines
2.2 KiB
PHP
--TEST--
|
|
Random: Randomizer: Engines returning an empty string are detected and rejected
|
|
--FILE--
|
|
<?php
|
|
|
|
use Random\Engine;
|
|
use Random\Randomizer;
|
|
|
|
final class EmptyStringEngine implements Engine
|
|
{
|
|
public function generate(): string
|
|
{
|
|
// Create a non-interned empty string.
|
|
return preg_replace('/./s', '', random_bytes(4));
|
|
}
|
|
}
|
|
|
|
function randomizer(): Randomizer
|
|
{
|
|
return new Randomizer(new EmptyStringEngine());
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->getInt(0, 1234));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->nextInt());
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(bin2hex(randomizer()->getBytes(1)));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->shuffleArray(range(1, 1234)));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->pickArrayKeys(range(1, 1234), 1));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->pickArrayKeys(range(1, 1234), 10));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->shuffleBytes('foobar'));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->getBytesFromString('123', 10));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
try {
|
|
var_dump(randomizer()->getBytesFromString(str_repeat('a', 500), 10));
|
|
} catch (Random\BrokenRandomEngineError $e) {
|
|
echo $e->getMessage(), PHP_EOL;
|
|
}
|
|
|
|
?>
|
|
--EXPECT--
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|
|
A random engine must return a non-empty string
|