Make WordPress Core

Changeset 34113


Ignore:
Timestamp:
09/14/2015 04:43:48 AM (9 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.