Skip to content

Commit 50bd8ba

Browse files
authored
PcgOneseq128XslRr64::jump(): Throw ValueError for negative $advance (#9213)
* PCG64: $advance must be non-negative Closes GH-9212
1 parent fac3734 commit 50bd8ba

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

ext/random/engine_pcgoneseq128xslrr64.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,11 @@ PHP_METHOD(Random_Engine_PcgOneseq128XslRr64, jump)
186186
Z_PARAM_LONG(advance);
187187
ZEND_PARSE_PARAMETERS_END();
188188

189+
if (UNEXPECTED(advance < 0)) {
190+
zend_argument_value_error(1, "must be greater than or equal to 0");
191+
RETURN_THROWS();
192+
}
193+
189194
php_random_pcgoneseq128xslrr64_advance(state, advance);
190195
}
191196
/* }}} */
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
Random: Engine: PcgOneseq128XslRr64: Jump with negative $advance
3+
--FILE--
4+
<?php
5+
6+
$engine = new \Random\Engine\PcgOneseq128XslRr64(1234);
7+
$referenceEngine = new \Random\Engine\PcgOneseq128XslRr64(1234);
8+
9+
try {
10+
$engine->jump(-1);
11+
} catch (ValueError $e) {
12+
echo $e->getMessage(), PHP_EOL;
13+
}
14+
15+
if ($engine->generate() !== $referenceEngine->generate()) {
16+
die('failure: state changed');
17+
}
18+
19+
die('success');
20+
?>
21+
--EXPECT--
22+
Random\Engine\PcgOneseq128XslRr64::jump(): Argument #1 ($advance) must be greater than or equal to 0
23+
success

0 commit comments

Comments
 (0)