File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1092,8 +1092,10 @@ ZEND_FUNCTION(gmp_fact)
10921092 RETURN_THROWS ();
10931093 }
10941094
1095- // TODO: Check that we don't an int that is larger than an unsigned long?
1096- // Could use mpz_fits_slong_p() if we revert to using mpz_get_si()
1095+ if (!mpz_fits_ulong_p (gmpnum )) {
1096+ zend_argument_value_error (1 , "must be between 0 and %lu ", ULONG_MAX );
1097+ RETURN_THROWS ();
1098+ }
10971099
10981100 INIT_GMP_RETVAL (gmpnum_result );
10991101 mpz_fac_ui (gmpnum_result , mpz_get_ui (gmpnum ));
Original file line number Diff line number Diff line change 1+ --TEST--
2+ gmp_fact() rejects values larger than unsigned long
3+ --EXTENSIONS--
4+ gmp
5+ --FILE--
6+ <?php
7+
8+ try {
9+ var_dump (gmp_fact (gmp_pow (2 , 100 )));
10+ } catch (\ValueError $ e ) {
11+ echo $ e ->getMessage () . \PHP_EOL ;
12+ }
13+
14+ try {
15+ var_dump (gmp_fact (gmp_init ("18446744073709551616 " )));
16+ } catch (\ValueError $ e ) {
17+ echo $ e ->getMessage () . \PHP_EOL ;
18+ }
19+
20+ echo "Done \n" ;
21+ ?>
22+ --EXPECTF--
23+ gmp_fact(): Argument #1 ($num) must be between 0 and %d
24+ gmp_fact(): Argument #1 ($num) must be between 0 and %d
25+ Done
You can’t perform that action at this time.
0 commit comments