Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 50bd8ba

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /