opcache.file_cache: segfault or wrong function for functions loaded with dl()
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
- 48/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Domaine
- backend, performance
Piste de recherche
Start with the ZEND_INIT_FCALL offset handling in zend_file_cache.c and review the change identified as d6541df63, along with related issue GH-24661. Reproduce the supplied dl() and OPcache file cache commands using the example scripts, then trace how functions added by the extension affect cached calls. Done means repeated runs call dl_test_test2() and print "Hello World" without a crash or calling a different function.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Description
Quoted text written with an LLM and checked by a human developer.
A script in the file cache can crash or call the wrong function if it calls a function loaded with
dl(), and that function has a different position in the function table on a later run.d6541df63 (GH-24664) removed the reset of the
ZEND_INIT_FCALLoffset fromzend_file_cache.c. The old comment said the reset could go once system ID validation was in place. The system ID is finalized at startup, so it does not cover functions added later bydl().
main.php:
<?php
if (isset($argv[1])) {
function a() {}
function b() {}
}
dl('dl_test');
include __DIR__ . '/call.php';
call.php:
<?php
var_dump(dl_test_test2());
With dl_test built as a shared extension:
PHP="php -d opcache.enable_cli=1 -d opcache.file_cache=/tmp/fc -d opcache.file_cache_only=1 -d opcache.file_update_protection=0"
$PHP main.php x
$PHP main.php
Resulted in this output:
string(11) "Hello World"
Segmentation fault
But I expected this output instead:
string(11) "Hello World"
string(11) "Hello World"
With only function a() {}, the second run calls a different function:
Fatal error: Uncaught ArgumentCountError: dl_test_frameless() expects exactly 1 argument, 0 given
Tested on debug and release builds of PHP-8.4 at 3ace94211. An earlier build at 2f6fd1167, without d6541df63, prints the expected output. The reset is also gone from the sources of php-8.4.28RC1, php-8.5.13RC1 and php-8.6.0RC5, which I did not build.
Related: GH-24661
PHP Version
PHP 8.4.28-dev (3ace94211)
Operating System
Ubuntu 26.04
- Langage dominant
- C
- Étoiles
- 41.8k
- Forks
- 8.5k
- Merge moyen
- 2 j 12 h
- PR mergées (30 j)
- 137
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
-
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
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
php/php-src#24196 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Feature Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
php/php-src#24183 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de php/php-src
Issues similaires
-
Research radar digest 2026-W46Ouverteresearch-radar
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
good first issue help wanted program
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
hffgzktbcc-blip/ounce-core#297 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
virtualsquare/picotcp#88 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour