Make WordPress Core

Ticket #24248: 24248-updated.diff

File 24248-updated.diff, 2.8 KB (added by pareshradadiya, 10 years ago)

Guid field sanitation fix while insert and php unit testcase added

  • src/wp-includes/post.php

     
    31063106
    31073107        unset( $postarr[ 'filter' ] );
    31083108
     3109    if( ! empty( $postarr['guid'] ) )
     3110        $guid = esc_url_raw( $postarr['guid'] );
     3111
    31093112        $postarr = sanitize_post($postarr, 'db');
    31103113
    31113114        // Are we updating or creating?
    31123115        $post_ID = 0;
    31133116        $update = false;
    3114         $guid = $postarr['guid'];
    31153117
    31163118        if ( ! empty( $postarr['ID'] ) ) {
    31173119                $update = true;
     
    31263128                        return 0;
    31273129                }
    31283130
    3129                 $guid = get_post_field( 'guid', $post_ID );
    3130                 $previous_status = get_post_field('post_status', $post_ID );
     3131                $guid = get_post_field( 'guid', $post_ID, 'raw' );
     3132                $previous_status = get_post_field( 'post_status', $post_ID, 'raw' );
    31313133        } else {
    31323134                $previous_status = 'new';
    31333135        }
     
    32093211        } else {
    32103212                // On updates, we need to check to see if it's using the old, fixed sanitization context.
    32113213                $check_name = sanitize_title( $post_name, '', 'old-save' );
    3212                 if ( $update && strtolower( urlencode( $post_name ) ) == $check_name && get_post_field( 'post_name', $post_ID ) == $check_name ) {
     3214                if ( $update && strtolower( urlencode( $post_name ) ) == $check_name && get_post_field( 'post_name', $post_ID, 'raw' ) == $check_name ) {
    32133215                        $post_name = $check_name;
    32143216                } else { // new post, or slug has changed.
    32153217                        $post_name = sanitize_title($post_name);
     
    34303432                }
    34313433        }
    34323434
    3433         $current_guid = get_post_field( 'guid', $post_ID );
     3435        $current_guid = get_post_field( 'guid', $post_ID, 'raw' );
    34343436
    34353437        // Set GUID.
    34363438        if ( ! $update && '' == $current_guid ) {
  • tests/phpunit/tests/post.php

     
    10681068                        $this->assertEquals( $value, $post->$field );
    10691069                }
    10701070        }
     1071
     1072
     1073    /**
     1074     * Tests 'guid' not properly escaped
     1075     * @ticket 24248
     1076     */
     1077    function test_wp_guid_escaped_properly() {
     1078
     1079        $guid = 'http://example.org/?p=77&test=blah';
     1080
     1081        //Insert new post with guid
     1082        $id = wp_insert_post( array(
     1083            'post_author' => $this->author_id,
     1084            'post_status' => 'new',
     1085            'post_content' => rand_str(),
     1086            'post_title' => rand_str(),
     1087            'guid' => $guid,
     1088        ) );
     1089        $post = get_post( $id );
     1090
     1091        $this->assertEquals( $guid, $post->guid );
     1092
     1093        //Update post
     1094        $id = wp_update_post( array(
     1095            'ID' => $id,
     1096            'post_status' => 'publish',
     1097            'post_content' => rand_str(),
     1098            'post_title' => rand_str(),
     1099        ) );
     1100        $post = get_post( $id );
     1101
     1102        $this->assertEquals( $guid, $post->guid );
     1103    }
     1104
    10711105}