WordPress.org

Make WordPress Core

Ticket #32565: 32565.4.diff

File 32565.4.diff, 3.0 KB (added by donmhico, 5 weeks ago)

Applied fix in add_meta() and added unit test.

  • src/wp-admin/includes/ajax-actions.php

    diff --git src/wp-admin/includes/ajax-actions.php src/wp-admin/includes/ajax-actions.php
    index 5ad5eac8a6..2fc811d3f4 100644
    function wp_ajax_add_meta() { 
    14971497                                        );
    14981498                                        $x->send();
    14991499                                }
    1500 
    1501                                 $mid = add_meta( $pid );
    1502                                 if ( ! $mid ) {
    1503                                         wp_die( __( 'Please provide a custom field value.' ) );
    1504                                 }
    15051500                        } else {
    15061501                                wp_die( 0 );
    15071502                        }
    1508                 } else {
    1509                         $mid = add_meta( $pid );
    1510                         if ( ! $mid ) {
    1511                                 wp_die( __( 'Please provide a custom field value.' ) );
    1512                         }
     1503                }
     1504
     1505                $mid = add_meta( $pid );
     1506                if ( is_wp_error( $mid ) ) {
     1507                        wp_die( $mid->get_error_message() );
     1508                } elseif ( ! $mid ) {
     1509                        wp_die( __( 'Please provide a custom field value.' ) );
    15131510                }
    15141511
    15151512                $meta = get_metadata_by_mid( 'post', $mid );
    function wp_ajax_add_meta() { 
    15381535                if ( is_protected_meta( $meta->meta_key, 'post' ) || is_protected_meta( $key, 'post' ) ||
    15391536                        ! current_user_can( 'edit_post_meta', $meta->post_id, $meta->meta_key ) ||
    15401537                        ! current_user_can( 'edit_post_meta', $meta->post_id, $key ) ) {
    1541                         wp_die( -1 );
     1538                        wp_die( __( 'Sorry, you are not allowed to edit this custom field.' ) );
    15421539                }
    15431540                if ( $meta->meta_value != $value || $meta->meta_key != $key ) {
    15441541                        $u = update_metadata_by_mid( 'post', $mid, $value, $key );
  • src/wp-admin/includes/post.php

    diff --git src/wp-admin/includes/post.php src/wp-admin/includes/post.php
    index ec083c569f..a0198ecb16 100644
    function write_post() { 
    889889 * Add post meta data defined in $_POST superglobal for post with given ID.
    890890 *
    891891 * @since 1.2.0
     892 * @since 5.3.0 Return `WP_Error` if the meta is protected or if the user doesn't have capability.
    892893 *
    893894 * @param int $post_ID
    894  * @return int|bool
     895 * @return int|bool|WP_Error
    895896 */
    896897function add_meta( $post_ID ) {
    897898        $post_ID = (int) $post_ID;
    function add_meta( $post_ID ) { 
    917918                }
    918919
    919920                if ( is_protected_meta( $metakey, 'post' ) || ! current_user_can( 'add_post_meta', $post_ID, $metakey ) ) {
    920                         return false;
     921                        return new WP_Error( 'edit_post_metas', __( 'Sorry, you are not allowed to edit this custom field.' ) );;
    921922                }
    922923
    923924                $metakey = wp_slash( $metakey );
  • tests/phpunit/tests/admin/includesPost.php

    diff --git tests/phpunit/tests/admin/includesPost.php tests/phpunit/tests/admin/includesPost.php
    index cad9742f8d..12cce2718a 100644
    class Tests_Admin_Includes_Post extends WP_UnitTestCase { 
    856856                $this->assertEquals( '', get_post_meta( $p, 'testkey', true ) );
    857857        }
    858858
     859        /**
     860         * @ticket 32565
     861         */
     862        public function test_post_add_meta_should_return_wp_error_if_protected_meta() {
     863                $post_id = self::factory()->post->create();
     864
     865                $_POST = array(
     866                        'metakeyinput' => '_testkey',
     867                        'metavalue'    => 'test_value',
     868                );
     869
     870                wp_set_current_user( self::$admin_id );
     871
     872                $this->assertWPError( add_meta( $post_id ) );
     873        }
     874
    859875        /**
    860876         * Test the post type support in post_exists().
    861877         *