php / php/php-src

PHP incorrectly closes file handles when used to replace STDIN/STDOUT/STDERR

Ouverte
#11,399 7 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Category: Streams Feature SAPI: cli
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

Description

The following code:

<?php
  fclose(STDIN);
  fclose(STDOUT);
  fclose(STDERR);
  fopen('/dev/null', 'r');
  fopen('/dev/null', 'w');
  fopen('/dev/null', 'w');

  exec("dig +noall +answer -t ns -q 'www.google.com'", $out, $ret);
  file_put_contents('ret.txt', $ret . "\n");

Resulted in exec failing with the return code 134 as seen in ret.txt

PHP's garbage collection seems to have not taken into account that the file handles opened are now in use as stdin/stdout/stderr. Obviously this can be worked around by storing the result of fopen into some global vars, but IMO this is a bug.

PHP Version

PHP 8.2.6

Operating System

Debian 11

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire l’exemple PHP 8.2.6 sur Debian 11, en vous concentrant sur le remplacement de STDIN, STDOUT et STDERR ainsi que sur le garbage collection ultérieur. Suivez la manière dont ces flux standard sont gérés avant l’exécution de exec. Le travail est terminé lorsque la commande n’échoue plus avec le code de retour 134 lorsque les handles de remplacement ne sont pas conservés dans des variables globales.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
php
Domaine
operating-systems
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.