WordPress.org

Make WordPress Core

Ticket #20223: 20223-unit-test.patch

File 20223-unit-test.patch, 1.8 KB (added by kurtpayne, 2 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