Changeset 32241
- Timestamp:
- 04/21/2015 07:05:24 AM (10 years ago)
- Location:
- branches/3.7
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.7/src/wp-includes/wp-db.php
r32188 r32241 1951 1951 return true; 1952 1952 } 1953 1954 // We don't need to check the collation for queries that don't read data. 1955 $query = ltrim( $query, "\r\n\t (" ); 1956 if ( preg_match( '/^(?:SHOW|DESCRIBE|DESC|EXPLAIN)\s/i', $query ) ) { 1957 return true; 1958 } 1959 1960 // All-ASCII queries don't need extra checking. 1961 if ( $this->check_ascii( $query ) ) { 1962 return true; 1963 } 1964 1953 1965 $table = $this->get_table_from_query( $query ); 1954 1966 if ( ! $table ) { … … 1957 1969 1958 1970 $this->checking_collation = true; 1959 $ this->get_table_charset( $table );1971 $collation = $this->get_table_charset( $table ); 1960 1972 $this->checking_collation = false; 1973 1974 // Tables with no collation, or latin1 only, don't need extra checking. 1975 if ( false === $collation || 'latin1' === $collation ) { 1976 return true; 1977 } 1961 1978 1962 1979 $table = strtolower( $table ); … … 1965 1982 } 1966 1983 1984 // If any of the columns don't have one of these collations, it needs more sanity checking. 1967 1985 foreach( $this->col_meta[ $table ] as $col ) { 1968 1986 if ( empty( $col->Collation ) ) { … … 1992 2010 * remove invalid characters, a {@see WP_Error} object is returned. 1993 2011 */ 2012 // If any of the columns don't have one of these collations, it needs more sanity checking. 1994 2013 protected function strip_invalid_text( $data ) { 1995 2014 // Some multibyte character sets that we can check in PHP. -
branches/3.7/tests/phpunit/tests/db/charset.php
r32188 r32241 500 500 501 501 $value[0] = "CREATE TABLE $this_table_name {$value[0]}"; 502 $value[2] = "SELECT * FROM $this_table_name ";502 $value[2] = "SELECT * FROM $this_table_name WHERE a='\xf0\x9f\x98\x88'"; 503 503 $value[3] = "DROP TABLE IF EXISTS $this_table_name"; 504 $value[4] = array( 505 "SELECT * FROM $this_table_name WHERE a='foo'", 506 "SHOW FULL TABLES LIKE $this_table_name", 507 "DESCRIBE $this_table_name", 508 "DESC $this_table_name", 509 "EXPLAIN SELECT * FROM $this_table_name", 510 ); 504 511 } 505 512 unset( $value ); … … 513 520 * @ticket 21212 514 521 */ 515 function test_table_collation_check( $create, $expected, $query, $drop ) {522 function test_table_collation_check( $create, $expected, $query, $drop, $always_true ) { 516 523 self::$_wpdb->query( $drop ); 517 524 … … 521 528 $this->assertEquals( $expected, $return ); 522 529 530 foreach( $always_true as $true_query ) { 531 $return = self::$_wpdb->check_safe_collation( $true_query ); 532 $this->assertTrue( $return ); 533 } 534 523 535 self::$_wpdb->query( $drop ); 524 536 }
Note: See TracChangeset
for help on using the changeset viewer.