php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #78340 Include of stream wrapper not reading whole file
Submitted: 2019-07-28 11:19 UTC Modified: 2019-07-29 08:05 UTC
From: thekid@php.net Assigned: nikic (profile)
Status: Closed Package: Scripting Engine problem
PHP Version: 7.4-snapshot OS: Windows
Private report: No CVE-ID: None
 [2019-07-28 11:19 UTC] thekid@php.net
Description:
------------
When reading files from a stream wrapper, not all bytes are read.


Test script:
---------------
<?php

class lib {
  public static $files= [];

  private $bytes, $pos;

  function stream_open($path, $mode, $options, $opened_path) {
    $this->bytes= self::$files[$path];
    $this->pos= 0;
    $this->ino= crc32($path);
    return true;
  }

  function stream_read($count) {
    $chunk= substr($this->bytes, $this->pos, $count);
    $this->pos+= strlen($chunk);
    return $chunk;
  }

  function stream_eof() {
    return $this->pos >= strlen($this->bytes);
  }

  function stream_close() {
    $this->bytes= null;
  }

  function stream_stat() {
    return [
      'dev'   => 3632233996,
      'size'  => strlen($this->bytes),
      'ino'   => $this->ino
    ];
  }

  function stream_set_option($option, $arg1, $arg2) {
    return false;
  }
}

$fill= str_repeat('.', $argv[1] ?? 0);
lib::$files['lib://test.php']= '<?php /* '.$fill.' */ function test() { echo "Works!\n"; }';
stream_wrapper_register('lib', lib::class);

include('lib://test.php');
test();

Expected result:
----------------
$ /cygdrive/c/tools/php-7.3.6-nts-Win32-VC15-x64/php wrapper.php 8192
Works!


Actual result:
--------------
$ /cygdrive/c/tools/php-7.4snap-nts-windows-vc15-x64/php wrapper.php 8192

Warning: Unterminated comment starting line 1 in lib://test.php on line 1

Fatal error: Uncaught Error: Call to undefined function test() in C:\tools\cygwin\home\Timm\devel\xp\core\wrapper.php:47
Stack trace:
#0 {main}


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-07-28 11:24 UTC] thekid@php.net
-Summary: Segfault in zend_objects_store_put +Summary: Stream wrappers not reading correctly -Operating System: Linux +Operating System: Windows -PHP Version: 7.4.0beta1 +PHP Version: 7.4-snapshot
 [2019-07-28 11:24 UTC] thekid@php.net
Correct metadata
 [2019-07-29 07:47 UTC] nikic@php.net
On linux this prints "Works!" for me (checked with and without opcache).
 [2019-07-29 07:49 UTC] nikic@php.net
-Status: Open +Status: Verified
 [2019-07-29 07:49 UTC] nikic@php.net
Sorry, I missed the fact that there is a CLI arg.
 [2019-07-29 07:56 UTC] nikic@php.net
-Assigned To: +Assigned To: nikic
 [2019-07-29 08:05 UTC] nikic@php.net
-Summary: Stream wrappers not reading correctly +Summary: Include of stream wrapper not reading whole file
 [2019-07-29 08:13 UTC] nikic@php.net
Automatic comment on behalf of nikita.ppv@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=9bfda013d308b47610fb23ee565500418a9f3cde
Log: Fixed bug #78340
 [2019-07-29 08:13 UTC] nikic@php.net
-Status: Verified +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 13:01:29 2024 UTC