Missing zend_return_unwrap_ref() calls trigger assertion failures:
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 45/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Domaine
- backend, testing-qa
Piste de recherche
Start by reading the linked issue #20628 and tracing the listed reproductions through RecursiveIteratorIterator::callHasChildren(), callGetChildren(), RecursiveFilterIterator::hasChildren(), and zend_call_method() in zend_test. Find where returned references need unwrapping, then add regression coverage for the reproductions and verify the assertion failures are gone.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
The following cases trigger assertion failures, tested on latest 8.6 dev (0dbc4a7953a8aca38d0cf04fa4fb4ac076f00419)
php: Zend/zend_vm_execute.h:2167: const zend_op *ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(zend_execute_data *, const zend_op *): Assertion `((call->func->common.fn_flags & (1 << 12)) && !zend_return_should_unwrap_ref(call)) ? (zval_get_type(&(*(ret))) == 10) : !(zval_get_type(&(*(ret))) == 10)' failed.
Aborted (core dumped)
`RecursiveIteratorIterator::callHasChildren()`
<?php
class Demo implements RecursiveIterator {
public bool $v = true;
public function getChildren(): ?RecursiveIterator { return null; }
public function &hasChildren(): bool { return $this->v; }
public function current(): mixed { return null; }
public function key(): mixed { return null; }
public function next(): void {}
public function rewind(): void {}
public function valid(): bool { return true; }
}
$r = new RecursiveIteratorIterator(new Demo());
var_dump($r->callHasChildren());
`RecursiveIteratorIterator::callGetChildren()`
<?php
class Demo implements RecursiveIterator {
public mixed $v = null;
public function &getChildren(): ?RecursiveIterator { return $this->v; }
public function hasChildren(): bool { return true; }
public function current(): mixed { return null; }
public function key(): mixed { return null; }
public function next(): void {}
public function rewind(): void {}
public function valid(): bool { return true; }
}
$r = new RecursiveIteratorIterator(new Demo());
var_dump($r->callGetChildren());
`RecursiveFilterIterator::hasChildren()`
<?php
class ConcreteRecursiveFilterIterator extends RecursiveFilterIterator {
public function accept(): bool { return true; }
}
class Demo implements RecursiveIterator {
public bool $v = true;
public function getChildren(): ?RecursiveIterator { return null; }
public function &hasChildren(): bool { return $this->v; }
public function current(): mixed { return null; }
public function key(): mixed { return null; }
public function next(): void {}
public function rewind(): void {}
public function valid(): bool { return true; }
}
$r = new ConcreteRecursiveFilterIterator(new Demo());
var_dump($r->hasChildren());
`zend_call_method()` from zend_test
<?php
class Demo {
public mixed $v = true;
public function &returnsRef() { return $this->v; }
}
$d = new Demo();
var_dump(zend_call_method($d, 'returnsRef'));
Cross-link #20628
- Langage dominant
- C
- Étoiles
- 41.8k
- Forks
- 8.5k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 145
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
-
ext/openssl: 8.2.31+/8.3.31+ fail to build against OpenSSL 1.0.2 (ASN1_STRING_get0_data in xp_ssl.c)Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
Les mainteneurs répondent en général sous 1 jour
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
php/php-src#25397 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
SNMP accepts malformed remote portsPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 Une demi-journée Accessibilité débutants 62/100
php/php-src#25137 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
Les mainteneurs répondent en général sous 1 jour
-
quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFFPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de php/php-src
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
not for AI lovers
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
OSGeo/gdal#15515 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Template: Bug
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
betaflight/betaflight#16014 ·
Les mainteneurs répondent en général sous 3 jours
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
ly05010419/MacNativeGames#2119 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100