Assertion failure in check_node_running_in_fiber() when resuming a generator inside a Fiber destructor
Aperta
Nessuno ha ancora preso questa issue.
Bug
Category: Engine
Status: Verified
- Lingua principale
- C
- Stelle
- 40.4k
- Fork
- 8.1k
- Merge medio
- 2g 13h
- PR unite (30g)
- 96
Descrizione
Description
The following code:
<?php
class a {
static $b;
static $max = 5.;
function __destruct() {
$a = new a;
static $gen = (function() {
$from = (function () {
$a = new a;
yield;
})();
try {
yield from $from;
} finally {
}
})();
$fiber = new Fiber(function () use ($gen, &$fiber) {
$gen->next();
});
$fiber->start();
}
}
new a;
Resulted in this output:
php: /path/to/php-src/Zend/zend_generators.c:217: _Bool check_node_running_in_fiber(zend_generator *): Assertion `generator->execute_data' failed.
Aborted
Commit:
56795d2810e
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 29 2025 14:32:34) (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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da Zend/zend_generators.c intorno a check_node_running_in_fiber() alla riga 217, quindi riproduci lo script fornito con la configurazione debug e AddressSanitizer. Traccia il ciclo di vita del generatore e di Fiber durante la distruzione dell’oggetto; il lavoro è completato quando il riproduttore non si interrompe più a causa dell’asserzione e la copertura di regressione verifica il comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, php
- Ambito
- backend
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100