php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #74442 Opcached version produces a nested array
Submitted: 2017-04-14 16:24 UTC Modified: 2017-04-14 16:59 UTC
From: rasmus@php.net Assigned:
Status: Closed Package: opcache
PHP Version: 7.1.5RC1 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: rasmus@php.net
New email:
PHP Version: OS:

 

 [2017-04-14 16:24 UTC] rasmus@php.net
Description:
------------
Without opcache this script prints 4. With opcache, on the first request to this script you get 4 as well. On the 2nd request when you hit the opcached version you get a nested array. Reproducable from cli with:

opcache.enable_cli=1
opcache.file_cache=/var/tmp
opcache.file_cache_only=1

It is fine in 7.0, so it is something we broke in 7.1

Test script:
---------------
<?php
class Schema_Base {
    public function addField($typeclass, array $params = null) {
        $field = new $typeclass($params);
        return $field;
    }
}

class Field_Base {
    public function __construct(array $params = null) {
        if (! is_array($params)) {
            $params = (array) $params;
        }
        call_user_func_array(array($this, 'acceptParams'), $params);
    }
}

class Field_Integer extends Field_Base {
    protected function acceptParams($bytes = 4) {
        echo print_r($bytes, true);
    }
}

try {
    $schema = new Schema_Base;
    $schema->addField('Field_Integer');
} catch (Throwable $ex) {
    echo "CAUGHT EXCEPTION";
    echo (string)$ex;
}


Expected result:
----------------
4

Actual result:
--------------
Array
(
    [0] => Array
 *RECURSION*
)


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-04-14 16:59 UTC] rasmus@php.net
Note that in the constructor if you do

if(is_null($params)) $params = [];

instead of trying to cast null to an array the problem goes away.
 [2017-04-14 20:21 UTC] nikic@php.net
Automatic comment on behalf of nikita.ppv@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=2f22dffd1a4535520959943e2e9aec8b2b9b647f
Log: Fixed bug #74442
 [2017-04-14 20:21 UTC] nikic@php.net
-Status: Open +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Mar 28 15:01:29 2024 UTC