WordPress.org

Make WordPress Core

Changeset 11853


Ignore:
Timestamp:
08/20/09 20:09:36 (6 years ago)
Author:
westi
Message:

Replace eval usage in request processing with new WP_MatchesMapRegex() class usage. See #9602 props hakre.

Location:
trunk/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/classes.php

    r11406 r11853  
    215215                    // Trim the query of everything up to the '?'. 
    216216                    $query = preg_replace("!^.+\?!", '', $query); 
    217  
     217                                         
    218218                    // Substitute the substring matches into the query. 
    219                     eval("@\$query = \"" . addslashes($query) . "\";"); 
     219                    $query = addslashes(WP_MatchesMapRegex::apply($query, $matches)); 
    220220 
    221221                    $this->matched_query = $query; 
     
    15931593} 
    15941594 
     1595/** 
     1596 * Helper class to remove the need to use eval to replace $matches[] in query strings. 
     1597 *  
     1598 * @since 2.9.0 
     1599 */ 
     1600class WP_MatchesMapRegex { 
     1601    /** 
     1602     * store for matches 
     1603     *  
     1604     * @access private 
     1605     * @var array 
     1606     */ 
     1607    var $_matches; 
     1608     
     1609    /** 
     1610     * store for mapping result 
     1611     *  
     1612     * @access public 
     1613     * @var string 
     1614     */ 
     1615    var $output; 
     1616     
     1617    /** 
     1618     * subject to perform mapping on (query string containing $matches[] references 
     1619     *  
     1620     * @access private 
     1621     * @var string 
     1622     */ 
     1623    var $_subject; 
     1624     
     1625    /** 
     1626     * regexp pattern to match $matches[] references  
     1627     *  
     1628     * @var string 
     1629     */ 
     1630    var $_pattern = '(\$matches\[[1-9]+[0-9]*\])'; // magic number 
     1631     
     1632    /** 
     1633     * constructor 
     1634     *  
     1635     * @param string $subject subject if regex 
     1636     * @param array  $matches data to use in map 
     1637     * @return self 
     1638     */                      
     1639    function WP_MatchesMapRegex($subject, $matches) { 
     1640        $this->_subject = $subject; 
     1641        $this->_matches = $matches; 
     1642        $this->output = $this->_map();               
     1643    } 
     1644     
     1645    /** 
     1646     * Substitute substring matches in subject. 
     1647     *  
     1648     * static helper function to ease use 
     1649     *  
     1650     * @access public 
     1651     * @param string $subject subject 
     1652     * @param array  $matches data used for subsitution 
     1653     * @return string 
     1654     */ 
     1655    function apply($subject, $matches) { 
     1656        $oSelf =& new WP_MatchesMapRegex($subject, $matches); 
     1657        return $oSelf->output;                                                               
     1658    } 
     1659     
     1660    /** 
     1661     * do the actual mapping  
     1662     *  
     1663     * @access private 
     1664     * @return string 
     1665     */ 
     1666    function _map() { 
     1667        $callback = array(&$this, 'callback'); 
     1668        return preg_replace_callback($this->_pattern, $callback, $this->_subject); 
     1669    } 
     1670     
     1671    /** 
     1672     * preg_replace_callback hook 
     1673     *  
     1674     * @access public 
     1675     * @param  array $matches preg_replace regexp matches 
     1676     * @return string 
     1677     */ 
     1678    function callback($matches) { 
     1679        $index = intval(substr($matches[0], 9, -1)); 
     1680        return ( isset( $this->_matches[$index] ) ? $this->_matches[$index] : '' ); 
     1681    } 
     1682     
     1683} 
     1684 
    15951685?> 
  • trunk/wp-includes/rewrite.php

    r11578 r11853  
    300300 
    301301            // Substitute the substring matches into the query. 
    302             eval("\$query = \"" . addslashes($query) . "\";"); 
     302            $query = addslashes(WP_MatchesMapRegex::apply($query, $matches)); 
    303303            // Filter out non-public query vars 
    304304            global $wp; 
Note: See TracChangeset for help on using the changeset viewer.