php / php/php-src

Inconsistent result stream with or without a function wrapper

Aperta
#19,525 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug Category: Streams Status: Needs Triage
Lingua principale
C
Stelle
40.4k
Fork
8.2k
Merge medio
2g 13h
PR unite (30g)
96

Descrizione

Description

The following code:

<?php
class Loader {
    public $context;
    private $position;
    private $data;
    public function stream_open($path, $mode, $options, &$opened_path)  {
        $this->data = '<' . "?php \n\"\";ll l\n ?" . '>';
        $this->position = 0;
        return true;
    }
    function stream_read($count) {
        $ret = substr($this->data, $this->position, $count);
        $this->position += strlen($ret);
        return $ret;
    }
    function stream_eof() {
        return $this->position >= strlen($this->data);
    }
    function stream_flush() {
        var_dump("flush!");
    }
    function stream_close() {
        @unlink(__DIR__."/bug38779.txt");
        var_dump("close!");
    }
}
stream_wrapper_register('Loader', 'Loader');
$fp = fopen ('Loader://qqq.php', 'r');
$filename = __DIR__."/bug38779.txt";
$fp1 = fopen($filename, "w");
fwrite($fp1, "<"."?php blah blah?".">");
fclose($fp1);
include $filename;

Resulted in this output:

Parse error: syntax error, unexpected identifier "blah" in /tmp/bug38779.txt on line 1
string(6) "close!"

The following code:

<?php
function foo() 
{
class Loader {
    public $context;
    private $position;
    private $data;
    public function stream_open($path, $mode, $options, &$opened_path)  {
        $this->data = '<' . "?php \n\"\";ll l\n ?" . '>';
        $this->position = 0;
        return true;
    }
    function stream_read($count) {
        $ret = substr($this->data, $this->position, $count);
        $this->position += strlen($ret);
        return $ret;
    }
    function stream_eof() {
        return $this->position >= strlen($this->data);
    }
    function stream_flush() {
        var_dump("flush!");
    }
    function stream_close() {
        @unlink(__DIR__."/bug38779.txt");
        var_dump("close!");
    }
}
stream_wrapper_register('Loader', 'Loader');
$fp = fopen ('Loader://qqq.php', 'r');
$filename = __DIR__."/bug38779.txt";
$fp1 = fopen($filename, "w");
fwrite($fp1, "<"."?php blah blah?".">");
fclose($fp1);
include $filename;
}
foo();

Resulted in this output:

Parse error: syntax error, unexpected identifier "blah" in /tmp/bug38779.txt on line 1
PHP Version
nightly
Operating System

No response

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo i due script PHP forniti sulla nightly build e confronta il comportamento dello stream wrapper e di include all’interno e all’esterno del function wrapper. Traccia il momento in cui il wrapper viene chiuso e determina il risultato coerente atteso prima di aggiungere un test di regressione mirato; l’issue non indica alcun file di test esistente né alcun punto di ingresso dell’implementazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
php
Ambito
compilers
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
28/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.