Make WordPress Core

Changeset 34113


Ignore:
Timestamp:
09/14/2015 04:43:48 AM (11 years ago)
Author:
wonderboymusic
Message:

Add sanity checks in map_meta_cap(), return 'do_not_allow' when posts don't exist.

Adds unit test.

Props ocean90, nerrad, filosofo.
Fixes #23162.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/capabilities-functions.php

    r34091 r34113  
    4848        case 'delete_page':
    4949                $post = get_post( $args[0] );
     50                if ( ! $post ) {
     51                        $caps[] = 'do_not_allow';
     52                        break;
     53                }
    5054
    5155                if ( 'revision' == $post->post_type ) {
    5256                        $post = get_post( $post->post_parent );
     57                        if ( ! $post ) {
     58                                $caps[] = 'do_not_allow';
     59                                break;
     60                        }
    5361                }
    5462
    … …  
    98106        case 'edit_page':
    99107                $post = get_post( $args[0] );
    100                 if ( empty( $post ) ) {
     108                if ( ! $post ) {
    101109                        $caps[] = 'do_not_allow';
    102110                        break;
    … …  
    105113                if ( 'revision' == $post->post_type ) {
    106114                        $post = get_post( $post->post_parent );
     115                        if ( ! $post ) {
     116                                $caps[] = 'do_not_allow';
     117                                break;
     118                        }
    107119                }
    108120
    … …  
    150162        case 'read_page':
    151163                $post = get_post( $args[0] );
     164                if ( ! $post ) {
     165                        $caps[] = 'do_not_allow';
     166                        break;
     167                }
    152168
    153169                if ( 'revision' == $post->post_type ) {
    154170                        $post = get_post( $post->post_parent );
     171                        if ( ! $post ) {
     172                                $caps[] = 'do_not_allow';
     173                                break;
     174                        }
    155175                }
    156176
    … …  
    187207        case 'publish_post':
    188208                $post = get_post( $args[0] );
     209                if ( ! $post ) {
     210                        $caps[] = 'do_not_allow';
     211                        break;
     212                }
     213
    189214                $post_type = get_post_type_object( $post->post_type );
    190215                if ( ! $post_type ) {
    … …  
    201226        case 'add_post_meta':
    202227                $post = get_post( $args[0] );
     228                if ( ! $post ) {
     229                        $caps[] = 'do_not_allow';
     230                        break;
     231                }
     232
    203233                $caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
    204234
    … …  
    230260        case 'edit_comment':
    231261                $comment = get_comment( $args[0] );
    232                 if ( empty( $comment ) )
    233                         break;
     262                if ( ! $comment ) {
     263                        $caps[] = 'do_not_allow';
     264                        break;
     265                }
     266
    234267                $post = get_post( $comment->comment_post_ID );
    235268
  • trunk/tests/phpunit/tests/user/mapMetaCap.php

    r31622 r34113  
    3636                unset( $GLOBALS['wp_post_types'][ $this->post_type ] );
    3737                parent::tearDown();
     38        }
     39
     40        /**
     41         * @ticket 13905
     42         */
     43        function test_capability_type_post_with_invalid_id() {
     44                $this->assertEquals(
     45                        array( 'do_not_allow' ),
     46                        map_meta_cap( 'edit_post', $this->user_id, $this->post_id + 1 )
     47                );
    3848        }
    3949
Note: See TracChangeset for help on using the changeset viewer.