Changeset 33311
- Timestamp:
- 07/17/2015 07:09:32 AM (9 years ago)
- Location:
- branches/4.2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/4.2/src/wp-includes/wp-db.php
r33309 r33311 2595 2595 if ( is_array( $value['length'] ) ) { 2596 2596 $length = $value['length']['length']; 2597 $truncate_by_byte_length = 'byte' === $value['length']['type']; 2597 2598 } else { 2598 2599 $length = false; 2600 // Since we have no length, we'll never truncate. 2601 // Initialize the variable to false. true would take us 2602 // through an unnecessary (for this case) codepath below. 2603 $truncate_by_byte_length = false; 2599 2604 } 2600 2605 … … 2608 2613 continue; 2609 2614 } 2610 2611 $truncate_by_byte_length = 'byte' === $value['length']['type'];2612 2615 2613 2616 $needs_validation = true; … … 2684 2687 } 2685 2688 2686 $queries[ $col ] = $this->prepare( "CONVERT( LEFT( CONVERT( %s USING $charset ), %.0f ) USING {$this->charset} )", $value['value'], $value['length']['length'] ); 2689 if ( is_array( $value['length'] ) ) { 2690 $queries[ $col ] = $this->prepare( "CONVERT( LEFT( CONVERT( %s USING $charset ), %.0f ) USING {$this->charset} )", $value['value'], $value['length']['length'] ); 2691 } else if ( 'binary' !== $charset ) { 2692 // If we don't have a length, there's no need to convert binary - it will always return the same result. 2693 $queries[ $col ] = $this->prepare( "CONVERT( CONVERT( %s USING $charset ) USING {$this->charset} )", $value['value'] ); 2694 } 2687 2695 2688 2696 unset( $data[ $col ]['db'] ); -
branches/4.2/tests/phpunit/tests/db/charset.php
r33309 r33311 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.