WordPress.org

Make WordPress Core

Changeset 39591


Ignore:
Timestamp:
12/13/16 01:48:41 (6 months ago)
Author:
rmccue
Message:

General: Remove most uses of create_function()

create_function() is equivalent to eval(), and most of our uses can be refactored. This is simpler, more secure, and slightly more performant.

Props sgolemon.
Fixes #37082.

Location:
trunk/src/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/atomlib.php

    r38883 r39591  
    9595        $this->feed = new AtomFeed(); 
    9696        $this->current = null; 
    97         $this->map_attrs_func = create_function('$k,$v', 'return "$k=\"$v\"";'); 
    98         $this->map_xmlns_func = create_function('$p,$n', '$xd = "xmlns"; if(strlen($n[0])>0) $xd .= ":{$n[0]}"; return "{$xd}=\"{$n[1]}\"";'); 
     97        $this->map_attrs_func = array( __CLASS__, 'map_attrs' ); 
     98        $this->map_xmlns_func = array( __CLASS__, 'map_xmlns' ); 
    9999    } 
    100100 
     
    104104    public function AtomParser() { 
    105105        self::__construct(); 
     106    } 
     107 
     108    /** 
     109     * Map attributes to key="val" 
     110     * 
     111     * @param string $k Key 
     112     * @param string $v Value 
     113     * @return string 
     114     */ 
     115    public static function map_attrs($k, $v) { 
     116        return "$k=\"$v\""; 
     117    } 
     118 
     119    /** 
     120     * Map XML namespace to string. 
     121     * 
     122     * @param indexish $p XML Namespace element index 
     123     * @param array $n Two-element array pair. [ 0 => {namespace}, 1 => {url} ] 
     124     * @return string 'xmlns="{url}"' or 'xmlns:{namespace}="{url}"' 
     125     */ 
     126    public static function map_xmlns($p, $n) { 
     127        $xd = "xmlns"; 
     128        if( 0 < strlen($n[0]) ) { 
     129            $xd .= ":{$n[0]}"; 
     130        } 
     131        return "{$xd}=\"{$n[1]}\""; 
    106132    } 
    107133 
  • trunk/src/wp-includes/pomo/po.php

    r35714 r39591  
    168168     */ 
    169169    public static function prepend_each_line($string, $with) { 
    170         $php_with = var_export($with, true); 
    171170        $lines = explode("\n", $string); 
    172         // do not prepend the string on the last empty line, artefact by explode 
    173         if ("\n" == substr($string, -1)) unset($lines[count($lines) - 1]); 
    174         $res = implode("\n", array_map(create_function('$x', "return $php_with.\$x;"), $lines)); 
    175         // give back the empty line, we ignored above 
    176         if ("\n" == substr($string, -1)) $res .= "\n"; 
    177         return $res; 
     171        $append = ''; 
     172        if ('' === end($lines)) { 
     173            // Last line might be empty because $string was terminated 
     174            // with a newline, remove it from the $lines array, 
     175            // we'll restore state by re-terminating the string at the end 
     176            array_pop($lines); 
     177            $append = "\n"; 
     178        } 
     179        foreach ($lines as &$line) { 
     180            $line = $with . $line; 
     181        } 
     182        unset($line); 
     183        return implode("\n", $lines) . $append; 
    178184    } 
    179185 
     
    281287 
    282288    /** 
     289     * Helper function for read_entry 
     290     * @param string $context 
     291     * @return bool 
     292     */ 
     293    protected static function is_final($context) { 
     294        return ($context === 'msgstr') || ($context === 'msgstr_plural'); 
     295    } 
     296 
     297    /** 
    283298     * @param resource $f 
    284299     * @param int      $lineno 
     
    291306        $context = ''; 
    292307        $msgstr_index = 0; 
    293         $is_final = create_function('$context', 'return $context == "msgstr" || $context == "msgstr_plural";'); 
    294308        while (true) { 
    295309            $lineno++; 
     
    297311            if (!$line)  { 
    298312                if (feof($f)) { 
    299                     if ($is_final($context)) 
     313                    if (self::is_final($context)) 
    300314                        break; 
    301315                    elseif (!$context) // we haven't read a line and eof came 
     
    311325            if (preg_match('/^#/', $line, $m)) { 
    312326                // the comment is the start of a new entry 
    313                 if ($is_final($context)) { 
     327                if (self::is_final($context)) { 
    314328                    PO::read_line($f, 'put-back'); 
    315329                    $lineno--; 
     
    323337                $this->add_comment_to_entry($entry, $line); 
    324338            } elseif (preg_match('/^msgctxt\s+(".*")/', $line, $m)) { 
    325                 if ($is_final($context)) { 
     339                if (self::is_final($context)) { 
    326340                    PO::read_line($f, 'put-back'); 
    327341                    $lineno--; 
     
    334348                $entry->context .= PO::unpoify($m[1]); 
    335349            } elseif (preg_match('/^msgid\s+(".*")/', $line, $m)) { 
    336                 if ($is_final($context)) { 
     350                if (self::is_final($context)) { 
    337351                    PO::read_line($f, 'put-back'); 
    338352                    $lineno--; 
     
    384398            } 
    385399        } 
    386         if (array() == array_filter($entry->translations, create_function('$t', 'return $t || "0" === $t;'))) { 
     400 
     401        $have_translations = false; 
     402        foreach ( $entry->translations as $t ) { 
     403            if ( $t || ('0' === $t) ) { 
     404                $have_translations = true; 
     405                break; 
     406            } 
     407        } 
     408        if ( false === $have_translations ) { 
    387409            $entry->translations = array(); 
    388410        } 
     411 
    389412        return array('entry' => $entry, 'lineno' => $lineno); 
    390413    } 
Note: See TracChangeset for help on using the changeset viewer.