Changeset 33310
- Timestamp:
- 07/17/2015 07:06:33 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/wp-db.php
r33308 r33310 2630 2630 if ( is_array( $value['length'] ) ) { 2631 2631 $length = $value['length']['length']; 2632 $truncate_by_byte_length = 'byte' === $value['length']['type']; 2632 2633 } else { 2633 2634 $length = false; 2635 // Since we have no length, we'll never truncate. 2636 // Initialize the variable to false. true would take us 2637 // through an unnecessary (for this case) codepath below. 2638 $truncate_by_byte_length = false; 2634 2639 } 2635 2640 … … 2643 2648 continue; 2644 2649 } 2645 2646 $truncate_by_byte_length = 'byte' === $value['length']['type'];2647 2650 2648 2651 $needs_validation = true; … … 2719 2722 } 2720 2723 2721 $queries[ $col ] = $this->prepare( "CONVERT( LEFT( CONVERT( %s USING $charset ), %.0f ) USING {$this->charset} )", $value['value'], $value['length']['length'] ); 2724 if ( is_array( $value['length'] ) ) { 2725 $queries[ $col ] = $this->prepare( "CONVERT( LEFT( CONVERT( %s USING $charset ), %.0f ) USING {$this->charset} )", $value['value'], $value['length']['length'] ); 2726 } else if ( 'binary' !== $charset ) { 2727 // If we don't have a length, there's no need to convert binary - it will always return the same result. 2728 $queries[ $col ] = $this->prepare( "CONVERT( CONVERT( %s USING $charset ) USING {$this->charset} )", $value['value'] ); 2729 } 2722 2730 2723 2731 unset( $data[ $col ]['db'] ); -
trunk/tests/phpunit/tests/db/charset.php
r33308 r33310 214 214 'expected' => "\xd8ord\xd0ress", 215 215 'length' => array( 'type' => 'char', 'length' => 100 ), 216 ), 217 'cp1251_no_length' => array( 218 'charset' => 'cp1251', 219 'value' => "\xd8ord\xd0ress", 220 'expected' => "\xd8ord\xd0ress", 221 'length' => false, 222 ), 223 'cp1251_no_length_ascii' => array( 224 'charset' => 'cp1251', 225 'value' => "WordPress", 226 'expected' => "WordPress", 227 'length' => false, 228 // Don't set 'ascii' => true/false. 229 // That's a different codepath than it being unset even if 230 // three's only only ASCII in the value. 216 231 ), 217 232 'cp1251_char_length' => array( … … 808 823 $this->assertEquals( 255, strlen( $stripped ) ); 809 824 } 825 826 /** 827 * @ticket 32279 828 */ 829 function test_strip_invalid_text_from_query_cp1251_is_safe() { 830 $tablename = 'test_cp1251_query_' . rand_str( 5 ); 831 if ( ! self::$_wpdb->query( "CREATE TABLE $tablename ( a VARCHAR(50) ) DEFAULT CHARSET 'cp1251'" ) ) { 832 $this->markTestSkipped( "Test requires the 'cp1251' charset" ); 833 } 834 835 $safe_query = "INSERT INTO $tablename( `a` ) VALUES( 'safe data' )"; 836 $stripped_query = self::$_wpdb->strip_invalid_text_from_query( $safe_query ); 837 838 self::$_wpdb->query( "DROP TABLE $tablename" ); 839 840 $this->assertEquals( $safe_query, $stripped_query ); 841 } 810 842 }
Note: See TracChangeset
for help on using the changeset viewer.