Make WordPress Core

Changeset 57501


Ignore:
Timestamp:
01/31/2024 12:51:39 PM (3 years ago)
Author:
swissspidy
Message:

HTTP API: Ensure cookie names are cast to strings.

Props nosilver4u, darssen, kraftbj, engahmeds3ed, barry.hughes, schlessera.
Fixes #58566.

Location:
trunk
Files:
2 edited

Legend:

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

    r56723 r57501  
    468468                                        }
    469469                                );
    470                                 $cookie_jar[ $value->name ] = new WpOrg\Requests\Cookie( $value->name, $value->value, $attributes, array( 'host-only' => $value->host_only ) );
     470                                $cookie_jar[ $value->name ] = new WpOrg\Requests\Cookie( (string) $value->name, $value->value, $attributes, array( 'host-only' => $value->host_only ) );
    471471                        } elseif ( is_scalar( $value ) ) {
    472                                 $cookie_jar[ $name ] = new WpOrg\Requests\Cookie( $name, (string) $value );
     472                                $cookie_jar[ $name ] = new WpOrg\Requests\Cookie( (string) $name, (string) $value );
    473473                        }
    474474                }
  • trunk/tests/phpunit/tests/http/http.php

    r56559 r57501  
    662662                $this->assertTrue( $pre_http_request_filter_has_run, 'The pre_http_request filter is expected to run.' );
    663663        }
     664
     665        /**
     666         * Test that WP_Http::normalize_cookies method correctly casts integer keys to string.
     667         * @ticket 58566
     668         *
     669         * @covers WP_Http::normalize_cookies
     670         */
     671        public function test_normalize_cookies_casts_integer_keys_to_string() {
     672                $http = _wp_http_get_object();
     673
     674                $cookies = array(
     675                        '1'   => 'foo',
     676                        2     => 'bar',
     677                        'qux' => 7,
     678                );
     679
     680                $cookie_jar = $http->normalize_cookies( $cookies );
     681
     682                $this->assertInstanceOf( 'WpOrg\Requests\Cookie\Jar', $cookie_jar );
     683
     684                foreach ( array_keys( $cookies ) as $cookie ) {
     685                        if ( is_string( $cookie ) ) {
     686                                $this->assertInstanceOf( 'WpOrg\Requests\Cookie', $cookie_jar[ $cookie ] );
     687                        } else {
     688                                $this->assertInstanceOf( 'WpOrg\Requests\Cookie', $cookie_jar[ (string) $cookie ] );
     689                        }
     690                }
     691        }
     692
     693        /**
     694         * Test that WP_Http::normalize_cookies method correctly casts integer cookie names to strings.
     695         * @ticket 58566
     696         *
     697         * @covers WP_Http::normalize_cookies
     698         */
     699        public function test_normalize_cookies_casts_cookie_name_integer_to_string() {
     700                $http = _wp_http_get_object();
     701
     702                $cookies = array(
     703                        'foo' => new WP_Http_Cookie(
     704                                array(
     705                                        'name'  => 1,
     706                                        'value' => 'foo',
     707                                )
     708                        ),
     709                );
     710
     711                $cookie_jar = $http->normalize_cookies( $cookies );
     712
     713                $this->assertInstanceOf( 'WpOrg\Requests\Cookie\Jar', $cookie_jar );
     714                $this->assertInstanceOf( 'WpOrg\Requests\Cookie', $cookie_jar['1'] );
     715        }
    664716}
Note: See TracChangeset for help on using the changeset viewer.