Skip to content

Assertion failure in zendlex() during re-entrant __call() execution triggered by eval() and autoloader registration #20564

@vi3tL0u1s

Description

@vi3tL0u1s

Description

The following code:

<?php
class A {
    function __call($method, $args) {
        spl_autoload_register(('A::mj'));
        eval('const T_8 = <<<ENDOFSTRING
        This is a test string
        ENDOFSTRING;?>');
        array_map('R::b', []);
    }
    function __destruct() {
        $this->close();
    }
}

$obx = new A(1);

Resulted in this output:

php: /path/to/php-src/Zend/zend_compile.c:2037: int zendlex(zend_parser_stack_elem *): Assertion `!(executor_globals.exception) || ret == T_ERROR' failed.
Aborted

Commit:

56dd321ec7bc93149cba461ab6059b5e5b5dc8e0

Build configuration:

CC="clang" CXX="clang++" CFLAGS="-fsanitize=address -g -O0" CXXFLAGS="-fsanitize=address -g -O0" LDFLAGS="-fsanitize=address" ./buildconf --force && ./configure --enable-debug --enable-address-sanitizer --disable-shared --with-pic --enable-mbstring --with-zlib

PHP Version

PHP 8.6.0-dev (cli) (built: Nov 23 2025 13:25:26) (NTS DEBUG)
Copyright (c) The PHP Group
Zend Engine v4.6.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v8.6.0-dev, Copyright (c), by Zend Technologies

Operating System

Ubuntu 22.04

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions