WordPress.org

Make WordPress Core

Ticket #19861: 19861.3.patch

File 19861.3.patch, 1.8 KB (added by kurtpayne, 8 years ago)

Do not stringify floats in real_escape

  • wp-includes/wp-db.php

     
    850850         * @return void
    851851         */
    852852        function escape_by_ref( &$string ) {
    853                 $string = $this->_real_escape( $string );
     853                if ( !is_float( $string ) )
     854                        $string = $this->_real_escape( $string );
    854855        }
    855856
    856857        /**
     
    901902                        $args = $args[0];
    902903                $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it
    903904                $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting
     905                $query = str_replace( '%f' , '%F', $query ); // Force floats to be locale unaware               
    904906                $query = preg_replace( '|(?<!%)%s|', "'%s'", $query ); // quote the strings, avoiding escaped strings like %%s
    905907                array_walk( $args, array( &$this, 'escape_by_ref' ) );
    906908                return @vsprintf( $query, $args );
     
    12141216                                $form = $this->field_types[$field];
    12151217                        else
    12161218                                $form = '%s';
     1219
     1220                        if ( in_array( $form, array( '%f', '%F' ) ) )
     1221                                $data[ $field ] = str_replace( ',', '.', $data[ $field ] );
     1222
    12171223                        $formatted_fields[] = $form;
    12181224                }
    12191225                $sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES (" . implode( ",", $formatted_fields ) . ")";
     
    12541260                                $form = $this->field_types[$field];
    12551261                        else
    12561262                                $form = '%s';
     1263
     1264                        if ( in_array( $form, array( '%f', '%F' ) ) )
     1265                                $data[ $field ] = str_replace( ',', '.', $data[ $field ] );
     1266
    12571267                        $bits[] = "`$field` = {$form}";
    12581268                }
    12591269
     
    12651275                                $form = $this->field_types[$field];
    12661276                        else
    12671277                                $form = '%s';
     1278
     1279                        if ( in_array( $form, array( '%f', '%F' ) ) )
     1280                                $where[ $field ] = str_replace( ',', '.', $where[ $field ] );
     1281
    12681282                        $wheres[] = "`$field` = {$form}";
    12691283                }
    12701284