WordPress.org

Make WordPress Core

Ticket #20223: 20223-unit-test.patch

File 20223-unit-test.patch, 1.8 KB (added by kurtpayne, 6 years ago)

Unit test for mysql_real_scape_string and fallback logic

  • wp-testcase/test_query.php

     
    564564        }
    565565}
    566566
    567 ?>
     567/**
     568 * Unit tests for the wpdb class
     569 */
     570class TestWPDB extends WPTestCase {
     571
     572        /**
     573         * Backup storage for $wpdb->real_escape
     574         * @var bool
     575         */
     576        private $_real_escape = true;
     577       
     578        /**
     579         * Backup $wpdb->real_escape
     580         * @global mixed $wpdb
     581         */
     582        public function setUp() {
     583                global $wpdb;
     584                $this->_real_escape = $wpdb->real_escape;
     585        }
     586
     587        /**
     588         * Restore $wpdb->real_escape
     589         * @global mixed $wpdb
     590         */
     591        public function tearDown() {
     592                global $wpdb;
     593                $wpdb->real_escape = $this->_real_escape;
     594        }
     595
     596        /**
     597         * Check the fallback logic for $wpdb->_real_escape when a connection to mysql isn't present.
     598         * @see http://us.php.net/mysql_real_escape_string
     599         * @global mixed $wpdb
     600         */
     601        public function test_real_escape() {
     602                $this->knownWPBug( 20223 );
     603                global $wpdb;
     604                $strings = array(
     605                        'wordpress',
     606                        'word\press',
     607                        'word\\press',
     608                        'word\\\press',
     609                        'word\\\\press',
     610                        'word\'press',
     611                        'word\\\'press',
     612                        'word\\\\press',
     613                        'word"press',
     614                        'word\"press',
     615                        'word' . "\n" . 'press',
     616                        'word' . "\r" . 'press',
     617                        'word\x00press',
     618                        'word\x1apress',
     619                        'word\x00\x1a\x13\x10\\\'\"press',
     620                );
     621                foreach ( $strings as $string ) {
     622                        $wpdb->real_escape  = true;
     623                        $mysql_escape_query = $wpdb->prepare( "SELECT id FROM {$wpdb->users} WHERE user_login = '%s'", $wpdb->_real_escape( $string ) );
     624                        $wpdb->real_escape  = false;
     625                        $fake_escape_query  = $wpdb->prepare( "SELECT id FROM {$wpdb->users} WHERE user_login = '%s'", $wpdb->_real_escape( $string ) );
     626                        $this->assertEquals( $mysql_escape_query, $fake_escape_query );
     627                }
     628        }
     629}
     630