Assertion failure in gc with invalid variable (OOM)
Offen
Dieses Issue hat noch niemand übernommen.
Bug
Category: Engine
Status: Verified
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.1k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
Description
The following code:
<?php
$cls = new finfo();
class foo {
public $x;
static public $y;
public function a() {
return $this->x;
}
static public function b() {
return self::$y;
}
}
$foo = new foo;
$h = $foo->a()[0]->a;
$h = foo::b()[1]->b;
var_dump($h);
$fusion = $h;
$base = curl_init('http://www.google.com/');
curl_setopt($base, CURLOPT_RETURNTRANSFER, true);
$mh = curl_multi_init();
for ($i = 0; $fusion < 2; ++$i) {
$ch = curl_copy_handle($base);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Foo: Bar']);
curl_multi_add_handle($mh, $ch);
}
?>
Resulted in this output:
php: Zend/zend_types.h:1346: uint32_t zend_gc_delref(zend_refcounted_h *): Assertion `p->refcount > 0' failed.
Aborted (core dumped)
PHP Version
nightly
Operating System
ubuntu 22.04
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Führen Sie zunächst den mitgelieferten PHP-Reproducer mit einem nightly build unter Ubuntu 22.04 aus und untersuchen Sie dann die Assertion in Zend/zend_types.h in Zeile 1346. Verfolgen Sie die ungültige Variable und die Änderungen der Referenzzählung durch den Reproducer; fertig ist die Aufgabe, wenn das Skript nicht mehr mit der Assertion zend_gc_delref abbricht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- c, php
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 35/100