WordPress.org

Make WordPress Core

Ticket #11102: 11102.2.diff

File 11102.2.diff, 1.1 KB (added by dd32, 4 years ago)

with bail on unmatched args/%'s

  • wp-includes/wp-db.php

     
    557557        function prepare($query = null) { // ( $query, *$args ) 
    558558                if ( is_null( $query ) ) 
    559559                        return; 
    560                 $args = func_get_args(); 
    561                 array_shift($args); 
    562                 // If args were passed as an array (as in vsprintf), move them up 
    563                 if ( isset($args[0]) && is_array($args[0]) ) 
    564                         $args = $args[0]; 
     560                $_args = func_get_args(); 
     561                array_shift($_args); 
     562                $args = array(); 
     563                // If any args were passed as arrays, merge them inline 
     564                foreach ( $_args as $arg ) { 
     565                        if ( is_array($arg) ) 
     566                                $args = array_merge($args, $arg); 
     567                        else 
     568                                $args[] = $arg; 
     569                } 
     570                //If the correct number of args (once array expanded) was not passed in, bail 
     571                if ( count($args) != substr_count($query, '%') ) 
     572                        return false; 
    565573                $query = str_replace("'%s'", '%s', $query); // in case someone mistakenly already singlequoted it 
    566574                $query = str_replace('"%s"', '%s', $query); // doublequote unquoting 
    567575                $query = str_replace('%s', "'%s'", $query); // quote the strings