mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 14:20:15 +00:00
Sitemaps: Prevent invalid provider names throwing errors.
Validate the requested sitemap is a string before attempting to use it in a provider. This prevents `WP_Sitemaps_Registry::get_provider()` from triggering a fatal error in more recent versions of PHP. The errors can be triggered by items outside the site owner or developers control (such as a user visiting `?sitemap[foo]=bar`) so the code fails silently to avoid filling error logs with unfixable errors. Props costdev, dd32. Fixes #56336. git-svn-id: https://develop.svn.wordpress.org/trunk@53838 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -65,7 +65,7 @@ class WP_Sitemaps_Registry {
|
||||
* @return WP_Sitemaps_Provider|null Sitemap provider if it exists, null otherwise.
|
||||
*/
|
||||
public function get_provider( $name ) {
|
||||
if ( ! isset( $this->providers[ $name ] ) ) {
|
||||
if ( ! is_string( $name ) || ! isset( $this->providers[ $name ] ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,4 +31,40 @@ class Tests_Sitemaps_wpSitemapsRegistry extends WP_UnitTestCase {
|
||||
$this->assertCount( 1, $providers );
|
||||
$this->assertSame( $providers['foo'], $provider1, 'Can not confirm sitemap registration is working.' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that `WP_Sitemaps_Registry::get_provider()` returns `null` when
|
||||
* the `$name` argument is not a string.
|
||||
*
|
||||
* @ticket 56336
|
||||
*
|
||||
* @covers WP_Sitemaps_Registry::get_provider
|
||||
*
|
||||
* @dataProvider data_get_provider_should_return_null_with_non_string_name
|
||||
*
|
||||
* @param mixed $name The non-string name.
|
||||
*/
|
||||
public function test_get_provider_should_return_null_with_non_string_name( $name ) {
|
||||
$registry = new WP_Sitemaps_Registry();
|
||||
$this->assertNull( $registry->get_provider( $name ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider with non-string values.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function data_get_provider_should_return_null_with_non_string_name() {
|
||||
return array(
|
||||
'array' => array( array() ),
|
||||
'object' => array( new stdClass() ),
|
||||
'bool (true)' => array( true ),
|
||||
'bool (false)' => array( false ),
|
||||
'null' => array( null ),
|
||||
'integer (0)' => array( 0 ),
|
||||
'integer (1)' => array( 1 ),
|
||||
'float (0.0)' => array( 0.0 ),
|
||||
'float (1.1)' => array( 1.1 ),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user