Make WordPress Core

Ticket #15928: 15928.10.patch

File 15928.10.patch, 2.8 KB (added by joemcgill, 10 years ago)
  • src/wp-includes/post.php

    diff --git src/wp-includes/post.php src/wp-includes/post.php
    index 39eb6a3..be1d71a 100644
    function wp_get_attachment_url( $post_id = 0 ) { 
    49464946                $url = get_the_guid( $post->ID );
    49474947        }
    49484948
     4949        // split the URL to see what scheme is being returned
     4950        list( $scheme, $path ) = explode( ':', $url, 2 );
     4951
     4952        // Force the url into an https scheme when we're in SSL and it is safe to do so
     4953        if ( is_ssl() && ($scheme = 'http') ) {
     4954
     4955                $ssl_url = 'https:' . $path;
     4956                $http = wp_remote_get( $ssl_url );
     4957
     4958                // if the HTTP request over SSL succeeds, use https
     4959                if ( ! is_wp_error( $http ) ) {
     4960                        $scheme = 'https';
     4961                }
     4962        }
     4963
     4964        $url = set_url_scheme( $url, $scheme );
     4965
    49494966        /**
    49504967         * Filter the attachment URL.
    49514968         *
  • tests/phpunit/tests/post/attachments.php

    diff --git tests/phpunit/tests/post/attachments.php tests/phpunit/tests/post/attachments.php
    index d079654..bd72f22 100644
    class Tests_Post_Attachments extends WP_UnitTestCase { 
    278278                $this->assertEquals( $attachment->post_parent, $post_id );
    279279        }
    280280
     281        /**
     282         * @ticket 15928
     283         */
     284        public function test_wp_get_attachment_with_https_off() {
     285                $filename = ( DIR_TESTDATA . '/images/test-image.jpg' );
     286                $contents = file_get_contents( $filename );
     287
     288                $upload = wp_upload_bits( basename( $filename ), null, $contents );
     289                $this->assertTrue( empty( $upload['error'] ) );
     290
     291                // Set attachment ID
     292                $attachment_id = $this->_make_attachment( $upload );
     293
     294                $is_ssl = is_ssl();
     295                $_SERVER['HTTPS'] = 'off';
     296
     297                // Test that wp_get_attachemt_url returns with http scheme
     298                $url = wp_get_attachment_url( $attachment_id );
     299                $this->assertSame( set_url_scheme( $url, 'http' ), $url );
     300
     301                // Cleanup
     302                $_SERVER['HTTPS'] = $is_ssl ? 'on' : 'off';
     303        }
     304
     305        /**
     306         * @ticket 15928
     307         */
     308        public function test_wp_get_attachment_url_with_https_on() {
     309                $filename = ( DIR_TESTDATA . '/images/test-image.jpg' );
     310                $contents = file_get_contents( $filename );
     311
     312                $upload = wp_upload_bits( basename( $filename ), null, $contents );
     313                $this->assertTrue( empty( $upload['error'] ) );
     314
     315                // Set attachment ID
     316                $attachment_id = $this->_make_attachment( $upload );
     317
     318                $is_ssl = is_ssl();
     319                $_SERVER['HTTPS'] = 'on';
     320
     321                // test to make sure the site front can actually be loaded over SSL
     322                $ssl_url = get_site_url( null, null, 'https' );
     323                $http = wp_remote_get( $ssl_url );
     324               
     325                if ( is_wp_error( $http ) ) {
     326                        $scheme = 'http';
     327                } else {
     328                        $scheme = 'https';
     329                }
     330
     331                // Test that wp_get_attachemt_url returns with https scheme
     332                $url = wp_get_attachment_url( $attachment_id );
     333                $this->assertSame( set_url_scheme( $url, $scheme ), $url );
     334
     335                // Cleanup
     336                $_SERVER['HTTPS'] = $is_ssl ? 'on' : 'off';
     337        }
     338
    281339}