|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
  [2021-07-27 09:46 UTC] ivo dot andonov at gmail dot com
 Description: ------------ This one is somewhat following https://bugs.php.net/bug.php?id=81294 and is again related to the removal of a filter. If the filter being removed outputs additional data then this data is correctly written to the underlying stream however the stream position is not updated. Seems that this should be done here: https://github.com/php/php-src/blob/PHP-8.0.8/main/streams/filter.c#L471 Or instead of using stream->ops->write(stream, bucket->buf, bucket->buflen); probably call (speculating) https://github.com/php/php-src/blob/PHP-8.0.8/main/streams/streams.c#L1120 Test script: --------------- <? $f = fopen("php://memory", "wb"); $z = stream_filter_append($f, "zlib.deflate", STREAM_FILTER_WRITE, 6); fwrite($f, "Test"); stream_filter_remove($z); echo "Position after remove: " . ftell($f) . "\n"; // 0 reported, should be 6 echo "Read: " . strlen(fread($f, 1024)) . "\n"; // 0 bytes fseek($f, 0); echo "Read after seek to the beginning: " . strlen(fread($f, 1024)) . "\n"; // 6 bytes read, so ftell should have reported 6 fclose($f); ?> Expected result: ---------------- After a filter is removed if it outputs additional data the underlying stream position (ftell) should be updated accordingly. PatchesPull Requests
Pull requests: 
 HistoryAllCommentsChangesGit/SVN commits             | |||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 07:00:01 2025 UTC | 
> fopen("php://memory", "wb"); By the way, the mode should be "w+b" here (or just "w+"), because reading from a write only stream shouldn't be supported (apparently it is for memory streams, though).