Aleksander Machniak
2013-05-01 4741d17c7777ed64b0d90b9265125a5dc0d69432
Use create_function() instead of eval()
2 files modified
16 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_ldap.php 15 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Make PHP code eval() free, use create_function()
- Add option to display email address together with a name in mail preview (#1488732)
- Fix Reply-To header handling in Reply-All action (#1489037)
- Fix so Sender: address is added to Cc: field on reply to all (#1489011)
program/lib/Roundcube/rcube_ldap.php
@@ -1396,6 +1396,10 @@
     */
    protected function add_autovalues(&$attrs)
    {
        if (empty($this->prop['autovalues'])) {
            return;
        }
        $attrvals = array();
        foreach ($attrs as $k => $v) {
            $attrvals['{'.$k.'}'] = is_array($v) ? $v[0] : $v;
@@ -1406,7 +1410,16 @@
                if (strpos($templ, '(') !== false) {
                    // replace {attr} placeholders with (escaped!) attribute values to be safely eval'd
                    $code = preg_replace('/\{\w+\}/', '', strtr($templ, array_map('addslashes', $attrvals)));
                    $attrs[$lf] = eval("return ($code);");
                    $fn   = create_function('', "return ($code);");
                    if (!$fn) {
                        rcube::raise_error(array(
                            'code' => 505, 'type' => 'php',
                            'file' => __FILE__, 'line' => __LINE__,
                            'message' => "Expression parse error on: ($code)"), true, false);
                        continue;
                    }
                    $attrs[$lf] = $fn();
                }
                else {
                    // replace {attr} placeholders with concrete attribute values