@@ -1837,6 +1837,7 @@ ZEND_FUNCTION(gmp_random_range)
18371837{
18381838 zval * min_arg , * max_arg ;
18391839 mpz_ptr gmpnum_min , gmpnum_max , gmpnum_result ;
1840+ mpz_t gmpnum_range ;
18401841 gmp_temp_t temp_a , temp_b ;
18411842
18421843 if (zend_parse_parameters (ZEND_NUM_ARGS (), "zz" , & min_arg , & max_arg ) == FAILURE ) {
@@ -1855,22 +1856,23 @@ ZEND_FUNCTION(gmp_random_range)
18551856 }
18561857
18571858 INIT_GMP_RETVAL (gmpnum_result );
1859+ mpz_init (gmpnum_range );
18581860
1859- if (Z_LVAL_P (min_arg )) {
1860- mpz_sub_ui (gmpnum_max , gmpnum_max , Z_LVAL_P (min_arg ));
1861+ if (Z_LVAL_P (min_arg ) != 0 ) {
1862+ mpz_sub_ui (gmpnum_range , gmpnum_max , Z_LVAL_P (min_arg ) - 1 );
1863+ } else {
1864+ mpz_add_ui (gmpnum_range , gmpnum_max , 1 );
18611865 }
18621866
1863- mpz_add_ui (gmpnum_max , gmpnum_max , 1 );
1864- mpz_urandomm (gmpnum_result , GMPG (rand_state ), gmpnum_max );
1867+ mpz_urandomm (gmpnum_result , GMPG (rand_state ), gmpnum_range );
18651868
1866- if (Z_LVAL_P (min_arg )) {
1869+ if (Z_LVAL_P (min_arg ) != 0 ) {
18671870 mpz_add_ui (gmpnum_result , gmpnum_result , Z_LVAL_P (min_arg ));
18681871 }
18691872
1873+ mpz_clear (gmpnum_range );
18701874 FREE_GMP_TEMP (temp_a );
1871-
1872- }
1873- else {
1875+ } else {
18741876 FETCH_GMP_ZVAL_DEP (gmpnum_min , min_arg , temp_b , temp_a );
18751877
18761878 if (mpz_cmp (gmpnum_max , gmpnum_min ) <= 0 ) {
@@ -1881,12 +1883,14 @@ ZEND_FUNCTION(gmp_random_range)
18811883 }
18821884
18831885 INIT_GMP_RETVAL (gmpnum_result );
1886+ mpz_init (gmpnum_range );
18841887
1885- mpz_sub (gmpnum_max , gmpnum_max , gmpnum_min );
1886- mpz_add_ui (gmpnum_max , gmpnum_max , 1 );
1887- mpz_urandomm (gmpnum_result , GMPG (rand_state ), gmpnum_max );
1888+ mpz_sub (gmpnum_range , gmpnum_max , gmpnum_min );
1889+ mpz_add_ui (gmpnum_range , gmpnum_range , 1 );
1890+ mpz_urandomm (gmpnum_result , GMPG (rand_state ), gmpnum_range );
18881891 mpz_add (gmpnum_result , gmpnum_result , gmpnum_min );
18891892
1893+ mpz_clear (gmpnum_range );
18901894 FREE_GMP_TEMP (temp_b );
18911895 FREE_GMP_TEMP (temp_a );
18921896 }
0 commit comments