From:             [EMAIL PROTECTED]
Operating system: linux 2.2.14-5.0
PHP version:      4.0.6
PHP Bug Type:     Scripting Engine problem
Bug description:  memory corruption with array references


This appeared between 4.0.4pl1 and 4.0.6. The following 
code snippet reproduces the bug.

=====================

<?
        $state = array(
                    'packversion' => 'Audit 1.0',
                    'createdate' => '08/22/2001',
                    'folder' => array(
                        array(
                            'itemid' => '1000',
                            'name' => '-1000',
                            'title' => 'Parent',
                            'doctype' => 'P',
                            'parent' => '0',
                            'createdate' => '08/22/2001',
                        ),
                        array(
                            'itemid' => '2000',
                            'name' => '-2000',
                            'title' => 'Parent',
                            'doctype' => 'P',
                            'parent' => '0',
                            'createdate' => '08/22/2001',
                        ),
                    ),
                );

        $info = array(
                    'itemid' => '2050',
                    'name' => '-2050',
                    'title' => 'Parent',
                    'doctype' => 'P',
                    'parent' => '2000',
                    'createdate' => '08/22/2001',
                );

        AddInfo($state, $info);
        print_r($state);

        function AddInfo(&$st, $in)
        {
                $parent = FindStateItem($st, 
$in['itemid']);
                $parent['folder'][] = $in;
        }

        function &FindStateItem(&$_state, $_itemid, $_op = 
'') {
        reset($_state);
        while (list($key,$val) = each($_state)) {
                //if (!is_array($val)) {
                                //continue;
                //}
                for ($i = 0; $i < count($val); $i++) {
                        if ($val[$i]['itemid'] == 
$_itemid) {
                        //if (is_array($val[$i]) && 
$val[$i]['itemid'] == $_itemid) {
                                if ($_op == 'delete') {
                                        
unset($_state[$key][$i]);
                                        return 1;
                                }
                                return $_state[$key][$i];
                        }
                }
                for ($i = 0; $i < count($val); $i++) {
                        if (!is_array($val[$i])) {
                                continue;
                        }
                        $item = 
FindStateItem($_state[$key][$i], $_itemid, $_op);
                        if ($item) {
                                return $item;
                        }
                }
        }
}


-- 
Edit bug report at: http://bugs.php.net/?id=12935&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to