Skip to content

Commit 78e7da0

Browse files
committed
Revert "add buffering Randomizer::getBytes"
This reverts commit 30c6073.
1 parent 3e522fb commit 78e7da0

File tree

3 files changed

+39
-54
lines changed

3 files changed

+39
-54
lines changed

ext/random/php_random.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,6 @@ typedef struct _php_random_randomizer {
176176
const php_random_engine_algo *algo;
177177
void *state;
178178
bool self_allocate;
179-
uint64_t buffer;
180-
size_t buffer_size;
181179
zend_object std;
182180
} php_random_randomizer;
183181

ext/random/random.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -801,8 +801,6 @@ static zend_object *php_random_randomizer_new(zend_class_entry *ce) {
801801
zend_object_std_init(&randomizer->std, ce);
802802
object_properties_init(&randomizer->std, ce);
803803

804-
randomizer->buffer = 0;
805-
randomizer->buffer_size = 0;
806804
randomizer->std.handlers = &random_randomizer_object_handlers;
807805

808806
return &randomizer->std;
@@ -1546,9 +1544,9 @@ PHP_METHOD(Random_Randomizer, getBytes)
15461544
php_random_randomizer *randomizer = Z_RANDOM_RANDOMIZER_P(ZEND_THIS);
15471545
zend_string *retval;
15481546
zend_long length;
1549-
uint64_t result;
1550-
size_t generated_size;
1551-
int i = 0;
1547+
size_t total_size = 0;
1548+
size_t required_size;
1549+
int i;
15521550

15531551
ZEND_PARSE_PARAMETERS_START(1, 1)
15541552
Z_PARAM_LONG(length)
@@ -1560,18 +1558,20 @@ PHP_METHOD(Random_Randomizer, getBytes)
15601558
}
15611559

15621560
retval = zend_string_alloc(length, 0);
1561+
required_size = length;
15631562

1564-
while (i < length) {
1565-
if (randomizer->buffer_size == 0) {
1566-
RANDOM_ENGINE_GENERATE_SIZE(randomizer->algo, randomizer->state, result, generated_size);
1567-
randomizer->buffer = result;
1568-
randomizer->buffer_size = generated_size;
1569-
}
1563+
while (total_size < required_size) {
1564+
uint64_t result;
1565+
size_t generated_size;
1566+
1567+
RANDOM_ENGINE_GENERATE_SIZE(randomizer->algo, randomizer->state, result, generated_size);
15701568

1571-
ZSTR_VAL(retval)[i] = randomizer->buffer & 0xff;
1572-
randomizer->buffer >>= 8;
1573-
--randomizer->buffer_size;
1574-
++i;
1569+
for (i = 0; i < generated_size; i++) {
1570+
ZSTR_VAL(retval)[total_size++] = (result >> (i * 8) & 0xff);
1571+
if (total_size >= required_size) {
1572+
break;
1573+
}
1574+
}
15751575
}
15761576

15771577
ZSTR_VAL(retval)[length] = '\0';

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

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,33 @@ Random: Randomizer: getBytes
33
--FILE--
44
<?php
55

6-
$engine = new class () implements \Random\Engine {
7-
private int $count = 0;
8-
9-
public function generate(): string
6+
$randomizer = new \Random\Randomizer (
7+
new class () implements \Random\Engine
108
{
11-
return match ($this->count++) {
12-
0 => 'H',
13-
1 => 'e',
14-
2 => 'l',
15-
3 => 'l',
16-
4 => 'o',
17-
5 => 'Hello',
18-
6 => 'Hello',
19-
6 => \random_bytes(32), // 128-bit
20-
default => \random_bytes(16),
21-
};
22-
}
9+
private int $count = 0;
2310

24-
public function getCount(): int
25-
{
26-
return $this->count;
11+
public function generate(): string
12+
{
13+
return match ($this->count++) {
14+
0 => 'H',
15+
1 => 'e',
16+
2 => 'l',
17+
3 => 'l',
18+
4 => 'o',
19+
5 => \random_bytes(32), // 128-bit
20+
default => \random_bytes(16),
21+
};
22+
}
2723
}
28-
};
29-
$randomizer = new \Random\Randomizer ($engine);
24+
);
25+
26+
if ($randomizer->getBytes(5) !== 'Hello') {
27+
die('failure');
28+
}
29+
30+
$randomizer->getBytes(6);
3031

31-
echo $randomizer->getBytes(5). PHP_EOL;
32-
echo $engine->getCount() . PHP_EOL;
33-
echo $randomizer->getBytes(5). PHP_EOL;
34-
echo $engine->getCount() . PHP_EOL;
35-
echo $randomizer->getBytes(4). PHP_EOL;
36-
echo $engine->getCount() . PHP_EOL;
37-
echo $randomizer->getBytes(1). PHP_EOL;
38-
echo $engine->getCount() . PHP_EOL;
32+
die('success');
3933
?>
4034
--EXPECTF--
41-
Hello
42-
5
43-
Hello
44-
6
45-
Hell
46-
7
47-
o
48-
7
35+
success

0 commit comments

Comments
 (0)