From df74d8f10dfe2d55f7aabd3cb5f8844d74e0335e Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 26 Jul 2020 21:25:02 +0000 Subject: [PATCH] Revisions: Ensure the global `$post` remains the same after revision is restored. Because `wp_insert_post()` and `wp_transition_post_status()` are called during the process, plugins can unexpectedly modify `$post`. Props markparnell, tofandel, archon810, SergeyBiryukov. Fixes #46671. Built from https://develop.svn.wordpress.org/trunk@48625 git-svn-id: http://core.svn.wordpress.org/trunk@48387 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/revision.php | 10 ++++++++++ wp-includes/version.php | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/wp-admin/revision.php b/wp-admin/revision.php index 43cc266748..156e998b57 100644 --- a/wp-admin/revision.php +++ b/wp-admin/revision.php @@ -60,8 +60,18 @@ switch ( $action ) { check_admin_referer( "restore-post_{$revision->ID}" ); + /* + * Ensure the global $post remains the same after revision is restored. + * Because wp_insert_post() and wp_transition_post_status() are called + * during the process, plugins can unexpectedly modify $post. + */ + $backup_global_post = clone $post; + wp_restore_post_revision( $revision->ID ); + // Restore the global $post as it was before. + $post = $backup_global_post; + $redirect = add_query_arg( array( 'message' => 5, diff --git a/wp-includes/version.php b/wp-includes/version.php index b92332110b..a7bb84c253 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -13,7 +13,7 @@ * * @global string $wp_version */ -$wp_version = '5.5-beta3-48624'; +$wp_version = '5.5-beta3-48625'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.