Assertion failure `_php_stream_seek` at streams/streams.c
Open
Nobody has claimed this yet.
Bug
Category: Streams
Status: Verified
- Dominant language
- C
- Stars
- 40.4k
- Forks
- 8.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 96
Description
Description
The following code:
<?php
class mystream {
function stream_open($path, $mode, $options, &$opened_path) { return true; }
function stream_seek($offset, $whence) {
$this->pos = $offset; // SEEK_CUR with negative offset → negative pos
return true;
}
function stream_tell() { return $this->pos; }
}
stream_wrapper_register("test", "mystream");
$fp = fopen("test://foo", "rb");
fseek($fp, -1, SEEK_CUR);
fseek($fp, 0, SEEK_CUR);
Resulted in this output:
php: /home/phpfuzz/WorkSpace/flowfusion/php-src/main/streams/streams.c:1465: int _php_stream_seek(php_stream *, zend_off_t, int): Assertion `stream->position >= 0' failed.
Aborted (core dumped)
To reproduce:
./php-src/sapi/cli/php ./test.php
Commit:
cdc0366bbb366934e91b5461d524226ecb26c891
Configurations:
CC="clang-12" CXX="clang++-12" CFLAGS="-DZEND_VERIFY_TYPE_INFERENCE" CXXFLAGS="-DZEND_VERIFY_TYPE_INFERENCE" ./configure --enable-debug --enable-address-sanitizer --enable-undefined-sanitizer --enable-re2c-cgoto --enable-fpm --enable-litespeed --enable-phpdbg-debug --enable-zts --enable-bcmath --enable-calendar --enable-dba --enable-dl-test --enable-exif --enable-ftp --enable-gd --enable-gd-jis-conv --enable-mbstring --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvmsg --enable-zend-test --with-zlib --with-bz2 --with-curl --with-enchant --with-gettext --with-gmp --with-mhash --with-ldap --with-libedit --with-readline --with-snmp --with-sodium --with-xsl --with-zip --with-mysqli --with-pdo-mysql --with-pdo-pgsql --with-pgsql --with-sqlite3 --with-pdo-sqlite --with-webp --with-jpeg --with-freetype --enable-sigchild --with-readline --with-pcre-jit --with-iconv
Operating System:
Ubuntu 20.04 Host, Docker 0599jiangyc/flowfusion:latest
This report is automatically generated by FlowFusion
PHP Version
nightly
Operating System
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with main/streams/streams.c, focusing on _php_stream_seek and the stream wrapper sequence in the report. Run ./php-src/sapi/cli/php ./test.php with the shown reproducer, then verify that seeking with the custom wrapper no longer triggers the position assertion or aborts.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, php
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100