WordPress.org

Make WordPress Core

Ticket #19861: 19861.3.patch

File 19861.3.patch, 1.8 KB (added by kurtpayne, 22 months 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