Make WordPress Core


Ignore:
Timestamp:
06/06/2022 10:48:21 PM (2 years ago)
Author:
audrasjb
Message:

General: Ensure wp_rand() returns 0 when $min and $max values are equal to 0.

This changeset ensures wp_rand() returns zero instead of a random number when both $min and $max values are equal to zero.

Fixes #55194.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/pluggable.php

    r53472 r53473  
    25972597     * @since 2.6.2
    25982598     * @since 4.4.0 Uses PHP7 random_int() or the random_compat library if available.
     2599     * @since 6.1.0 Returns zero instead of a random number if both `$min` and `$max` are zero.
    25992600     *
    26002601     * @global string $rnd_value
    26012602     *
    2602      * @param int $min Lower limit for the generated number.
    2603      * @param int $max Upper limit for the generated number.
     2603     * @param int $min Optional. Lower limit for the generated number.
     2604     *                 Accepts positive integers or zero. Defaults to 0.
     2605     * @param int $max Optional. Upper limit for the generated number.
     2606     *                 Accepts positive integers. Defaults to 4294967295.
    26042607     * @return int A random number between min and max.
    26052608     */
    2606     function wp_rand( $min = 0, $max = 0 ) {
     2609    function wp_rand( $min = null, $max = null ) {
    26072610        global $rnd_value;
    26082611
     
    26102613        // truncate integers larger than PHP_INT_MAX to PHP_INT_MAX rather than overflowing them to floats.
    26112614        $max_random_number = 3000000000 === 2147483647 ? (float) '4294967295' : 4294967295; // 4294967295 = 0xffffffff
     2615
     2616        if ( null === $min ) {
     2617            $min = 0;
     2618        }
     2619
     2620        if ( null === $max ) {
     2621            $max = $max_random_number;
     2622        }
    26122623
    26132624        // We only handle ints, floats are truncated to their integer value.
     
    26192630        if ( $use_random_int_functionality ) {
    26202631            try {
    2621                 $_max = ( 0 != $max ) ? $max : $max_random_number;
    26222632                // wp_rand() can accept arguments in either order, PHP cannot.
    2623                 $_max = max( $min, $_max );
    2624                 $_min = min( $min, $_max );
     2633                $_max = max( $min, $max );
     2634                $_min = min( $min, $max );
    26252635                $val  = random_int( $_min, $_max );
    26262636                if ( false !== $val ) {
     
    26622672
    26632673        // Reduce the value to be within the min - max range.
    2664         if ( 0 != $max ) {
    2665             $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 );
    2666         }
     2674        $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 );
    26672675
    26682676        return abs( (int) $value );
Note: See TracChangeset for help on using the changeset viewer.