Skip to content

Commit c56fe83

Browse files
committed
fix Randomizer::getBytes(0) and other PR feedback
1 parent 1cb7aeb commit c56fe83

File tree

5 files changed

+21
-12
lines changed

5 files changed

+21
-12
lines changed

ext/random/randomizer.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ PHP_METHOD(Random_Randomizer, getBytes)
278278
Z_PARAM_LONG(length)
279279
ZEND_PARSE_PARAMETERS_END();
280280

281-
if (length < 1) {
282-
zend_argument_value_error(1, "must be greater than 0");
281+
if (length < 0) {
282+
zend_argument_value_error(1, "must be greater than or equal to 0");
283283
RETURN_THROWS();
284284
}
285285

@@ -390,13 +390,13 @@ PHP_METHOD(Random_Randomizer, getBytesFromString)
390390
const size_t source_length = ZSTR_LEN(source);
391391
const size_t max_offset = source_length - 1;
392392

393-
if (source_length < 1) {
394-
zend_argument_value_error(1, "cannot be empty");
393+
if (source_length < 1 && length > 0) {
394+
zend_argument_value_error(1, "cannot be empty when argument #2 ($length) is greater than 0");
395395
RETURN_THROWS();
396396
}
397397

398-
if (length < 1) {
399-
zend_argument_value_error(2, "must be greater than 0");
398+
if (length < 0) {
399+
zend_argument_value_error(2, "must be greater than or equal to 0");
400400
RETURN_THROWS();
401401
}
402402

ext/random/tests/01_functions/random_bytes.phpt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Test normal operation of random_bytes()
44
<?php
55
//-=-=-=-
66

7+
var_dump(strlen(random_bytes(0)));
8+
79
var_dump(strlen(bin2hex(random_bytes(16))));
810

911
var_dump(is_string(random_bytes(10)));
@@ -12,6 +14,7 @@ var_dump(is_string(random_bytes(257)));
1214

1315
?>
1416
--EXPECT--
17+
int(0)
1518
int(32)
1619
bool(true)
1720
bool(true)

ext/random/tests/01_functions/random_bytes_error.phpt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Test error operation of random_bytes()
33
--FILE--
44
<?php
55
//-=-=-=-
6-
var_dump(random_bytes(0));
6+
77
try {
88
$bytes = random_bytes();
99
} catch (TypeError $e) {
@@ -18,6 +18,5 @@ try {
1818

1919
?>
2020
--EXPECT--
21-
string(0) ""
2221
random_bytes() expects exactly 1 argument, 0 given
2322
random_bytes(): Argument #1 ($length) must be greater than or equal to 0

ext/random/tests/03_randomizer/methods/getBytesFromString.phpt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ foreach ($engines as $engine) {
2727
$randomizer = new Randomizer($engine);
2828
var_dump($randomizer->getBytesFromString('a', 10));
2929
var_dump($randomizer->getBytesFromString(str_repeat('a', 256), 5));
30+
var_dump($randomizer->getBytesFromString('', 0));
3031

3132
for ($i = 1; $i < 250; $i++) {
3233
$output = $randomizer->getBytesFromString(str_repeat('ab', $i), 500);
@@ -48,19 +49,25 @@ Deprecated: The MT_RAND_PHP variant of Mt19937 is deprecated in %s on line %d
4849
Random\Engine\Mt19937
4950
string(10) "aaaaaaaaaa"
5051
string(5) "aaaaa"
52+
string(0) ""
5153
Random\Engine\Mt19937
5254
string(10) "aaaaaaaaaa"
5355
string(5) "aaaaa"
56+
string(0) ""
5457
Random\Engine\PcgOneseq128XslRr64
5558
string(10) "aaaaaaaaaa"
5659
string(5) "aaaaa"
60+
string(0) ""
5761
Random\Engine\Xoshiro256StarStar
5862
string(10) "aaaaaaaaaa"
5963
string(5) "aaaaa"
64+
string(0) ""
6065
Random\Engine\Secure
6166
string(10) "aaaaaaaaaa"
6267
string(5) "aaaaa"
68+
string(0) ""
6369
Random\Engine\Test\TestShaEngine
6470
string(10) "aaaaaaaaaa"
6571
string(5) "aaaaa"
72+
string(0) ""
6673
success

ext/random/tests/03_randomizer/methods/getBytesFromString_error.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ try {
1717
}
1818

1919
try {
20-
var_dump(randomizer()->getBytesFromString("abc", 0));
20+
var_dump(randomizer()->getBytesFromString("abc", -1));
2121
} catch (ValueError $e) {
2222
echo $e->getMessage(), PHP_EOL;
2323
}
2424

2525
?>
26-
--EXPECTF--
27-
Random\Randomizer::getBytesFromString(): Argument #1 ($string) cannot be empty
28-
Random\Randomizer::getBytesFromString(): Argument #2 ($length) must be greater than 0
26+
--EXPECT--
27+
Random\Randomizer::getBytesFromString(): Argument #1 ($string) cannot be empty when argument #2 ($length) is greater than 0
28+
Random\Randomizer::getBytesFromString(): Argument #2 ($length) must be greater than or equal to 0

0 commit comments

Comments
 (0)