WordPress.org

Make WordPress Core

Ticket #38751: 38751.3.diff

File 38751.3.diff, 2.1 KB (added by pento, 3 years ago)
  • src/wp-includes/wp-db.php

     
    30393039
    30403040                // SHOW TABLE STATUS and SHOW TABLES
    30413041                if ( preg_match( '/^\s*(?:'
    3042                                 . 'SHOW\s+TABLE\s+STATUS.+(?:LIKE\s+|WHERE\s+Name\s*=\s*)'
    3043                                 . '|SHOW\s+(?:FULL\s+)?TABLES.+(?:LIKE\s+|WHERE\s+Name\s*=\s*)'
    3044                                 . ')\W((?:[0-9a-zA-Z$_.`-]|[\xC2-\xDF][\x80-\xBF])+)\W/is', $query, $maybe ) ) {
    3045                         return str_replace( '`', '', $maybe[1] );
     3042                                . 'SHOW\s+(?:TABLE\s+STATUS|(?:FULL\s+)?TABLES).+(?:LIKE\s+|WHERE\s+Name(?:\s*=\s*|\s+LIKE\s+))'
     3043                                . ')\W((?:\\\\_|[0-9a-zA-Z$_.`-]|[\xC2-\xDF][\x80-\xBF])+)\W/is', $query, $maybe ) ) {
     3044                        return str_replace( array( '`', '\\_' ), array( '', '_' ), $maybe[1] );
    30463045                }
    30473046
    30483047                // Big pattern for the rest of the table-related queries.
  • tests/phpunit/tests/db.php

     
    671671        }
    672672
    673673        /**
     674         * @ticket 38751
     675         */
     676        function data_get_escaped_table_from_show_query() {
     677                $table = 'wp_123_foo';
     678                $escaped_table = 'wp\_123\_foo';
     679
     680                $queries = array(
     681                        "SHOW TABLES LIKE '$escaped_table'",
     682                        "SHOW TABLES WHERE Name LIKE '$escaped_table'",
     683
     684                        "SHOW FULL TABLES LIKE '$escaped_table'",
     685                        "SHOW FULL TABLES WHERE Name LIKE '$escaped_table'",
     686
     687                        "SHOW TABLE STATUS LIKE '$escaped_table'",
     688                        "SHOW TABLE STATUS WHERE Name LIKE '$escaped_table'",
     689                );
     690
     691                $data = array();
     692
     693                foreach ( $queries as $query ) {
     694                        $data[] = array( $query, $table );
     695
     696                        // Test for double quotes, too.
     697                        $data[] = array( str_replace( "'", '"', $query ), $table );
     698                }
     699
     700                return $data;
     701        }
     702
     703        /**
     704         * @dataProvider data_get_escaped_table_from_show_query
     705         * @ticket 38751
     706         */
     707        function test_get_escaped_table_from_show_query( $query, $table ) {
     708                $this->assertEquals( $table, self::$_wpdb->get_table_from_query( $query ) );
     709        }
     710
     711        /**
    674712         * @ticket 21212
    675713         */
    676714        function data_process_field_formats() {