Make WordPress Core

Ticket #32315: 32315.diff

File 32315.diff, 3.0 KB (added by jdgrimes, 7 years ago)

Initial patch

  • src/wp-includes/wp-db.php

     
    12081208         * This method DOES NOT support sign, padding, alignment, width or precision specifiers.
    12091209         * This method DOES NOT support argument numbering or swapping.
    12101210         *
    1211          * Arguments may be passed as individual arguments to the method, or as a single array containing all arguments. A combination 
     1211         * Arguments may be passed as individual arguments to the method, or as a single array containing all arguments. A combination
    12121212         * of the two is not supported.
    12131213         *
    12141214         * Examples:
     
    20642064                $conditions = implode( ' AND ', $conditions );
    20652065
    20662066                $sql = "UPDATE `$table` SET $fields WHERE $conditions";
    2067                
     2067
    20682068                $this->check_current_query = false;
    20692069                return $this->query( $this->prepare( $sql, $values ) );
    20702070        }
     
    21562156                $converted_data = $this->strip_invalid_text( $data );
    21572157
    21582158                if ( $data !== $converted_data ) {
     2159                        $problem_fields = array();
     2160
     2161                        foreach ( $data as $field => $value ) {
     2162                                if ( $value !== $converted_data[ $field ] ) {
     2163                                        $problem_fields[] = $field;
     2164                                }
     2165                        }
     2166
     2167                        if ( count( $problem_fields ) === 1 ) {
     2168                                $message = __( 'WordPress Database Error: Processing the value for the following field failed, the supplied value may have been too long or contained invalid data: %s.' );
     2169                        } else {
     2170                                $message = __( 'WordPress Database Error: Processing the values for the following fields failed, the supplied values may have been too long or contained invalid data: %s.' );
     2171                        }
     2172
     2173                        $this->last_error = sprintf( $message, implode( ', ', $problem_fields ) );
    21592174                        return false;
    21602175                }
    21612176
  • tests/phpunit/tests/db.php

     
    939939        }
    940940
    941941        /**
     942         * @ticket 32315
     943         */
     944        function test_process_fields_too_long() {
     945
     946                global $wpdb;
     947
     948                $data = array( 'post_status' => str_repeat( 'a', 21 ) );
     949
     950                $this->assertFalse( self::$_wpdb->process_fields( $wpdb->posts, $data, null ) );
     951                $this->assertSame(
     952                        'WordPress Database Error: Processing the value for the following field failed, the supplied value may have been too long or contained invalid data: post_status.',
     953                        self::$_wpdb->last_error
     954                );
     955        }
     956
     957        /**
     958         * @ticket 32315
     959         */
     960        function test_process_fields_too_long_multiple() {
     961
     962                global $wpdb;
     963
     964                $data = array(
     965                        'post_status' => str_repeat( 'a', 21 ),
     966                        'post_type'   => str_repeat( 'a', 21 ),
     967                );
     968
     969                $this->assertFalse( self::$_wpdb->process_fields( $wpdb->posts, $data, null ) );
     970                $this->assertSame(
     971                        'WordPress Database Error: Processing the values for the following fields failed, the supplied values may have been too long or contained invalid data: post_status, post_type.',
     972                        self::$_wpdb->last_error
     973                );
     974        }
     975
     976        /**
    942977         * @ticket 15158
    943978         */
    944979        function test_null_insert() {