Make WordPress Core

Changeset 39591


Ignore:
Timestamp:
12/13/2016 01:48:41 AM (8 years 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.