diff --git a/src/wp-includes/ms-blogs.php b/src/wp-includes/ms-blogs.php index d291f169db..83fec396ab 100644 --- a/src/wp-includes/ms-blogs.php +++ b/src/wp-includes/ms-blogs.php @@ -298,8 +298,7 @@ function update_blog_details( $blog_id, $details = array() ) { $fields = array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id'); foreach ( array_intersect( array_keys( $details ), $fields ) as $field ) { if ( 'path' === $field ) { - $details[ $field ] = array_filter( explode( '/', $details[ $field ] ) ); - $details[ $field ] = trailingslashit( '/' . implode( '/', $details[ $field ] ) ); + $details[ $field ] = trailingslashit( '/' . trim( $details[ $field ], '/' ) ); } $update_details[ $field ] = $details[ $field ]; diff --git a/tests/phpunit/tests/multisite/site.php b/tests/phpunit/tests/multisite/site.php index 603546c3c7..3924e51905 100644 --- a/tests/phpunit/tests/multisite/site.php +++ b/tests/phpunit/tests/multisite/site.php @@ -591,10 +591,14 @@ class Tests_Multisite_Site extends WP_UnitTestCase { $this->assertEquals( '/multiple/dirs/', $blog->path ); } + /** + * `update_blog_details()` does not resolve multiple slashes in the + * middle of a path string. + */ function test_update_blog_details_multiple_paths_middle_slashes() { update_blog_details( 1, array( 'path' => 'multiple///dirs' ) ); $blog = get_blog_details( 1 ); - $this->assertEquals( '/multiple/dirs/', $blog->path ); + $this->assertEquals( '/multiple///dirs/', $blog->path ); } function test_update_blog_details_multiple_paths_leading_slash() {