Lazy object reset with object destructor can lead to use-after-free
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 48/100
Piste de recherche
Start by reading Zend/zend_lazy_objects.c around zend_object_make_lazy at line 338, then compare the resetAsLazyGhost() and resetAsLazyProxy() paths with the related re-entrant destruction issue #22399. Reproduce with the supplied PHP snippet under AddressSanitizer; done means both reset methods avoid the heap-use-after-free.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Description
Originally reported by @cnwangjihe.
The re-entrant property destruction issue reported in #22399 also affects ReflectionClass::resetAsLazyGhost() and ReflectionClass::resetAsLazyProxy().
The following code:
<?php
class Target {
public ?Trigger $trigger = null;
}
class Trigger {
public function __construct(private object $target) {}
public function __destruct() {
unset($this->target->trigger);
}
}
$reflection = new ReflectionClass(Target::class);
$target = new Target();
$target->trigger = new Trigger($target);
$reflection->resetAsLazyGhost($target, static function (): void {});
Resulted in this output:
ERROR: AddressSanitizer: heap-use-after-free
zend_object_make_lazy Zend/zend_lazy_objects.c:338
But I expected this output instead:
PHP Version
PHP 8.4+
Operating System
No response
- Langage dominant
- C
- Étoiles
- 40.7k
- Forks
- 8.3k
- Merge moyen
- 2 j 16 h
- PR mergées (30 j)
- 151
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de php/php-src
-
sapi/fpm/tests/tester.inc can send SIGUSR2 to pid 0, killing run-tests.phpPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. OuverteBug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
zend_set_local_var() overwrites existing compiled variable (CV) zval without calling zval_ptr_dtor()Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. OuverteBug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Case-insensitive substr_compare, ksort, krsort are still locale-dependentPeut-être pris @lazerg l’a pris il y a 3 jours. OuverteBug Extension: standard Status: Verified
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
php/php-src#24552 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
master: part of the mbstring bailout fix got lost in a mergePeut-être pris @lazerg l’a pris il y a 4 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de php/php-src
Issues similaires
-
Add `CPC_TAKE_TILL_CHARS`Ouvertedifficulty: easy
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
performance solver
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
ChefKissInc/Inferno#319 ·
-
llvm-tools
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
llvm/llvm-project#235522 ·
Les mainteneurs répondent en général sous 1 jour