From: [EMAIL PROTECTED] Operating system: Linux PHP version: 4.3.0-pre1 PHP Bug Type: Reproducible crash Bug description: stream_register_wrapper and stream_eof
After fixing the missing semicolon in stream_register_wrapper's example (in the docs and pasted below), I get infinite loops (and sometimes crashes). It seems like this is coming from feof() having problems gettting TRUE from stream_eof. <? class VariableStream { var $position; var $varname; function stream_open($path, $mode, $options, &$opened_path) { $url = parse_url($path); $this->varname = $url["host"]; $this->position = 0; return true; } function stream_read($count) { $ret = substr($GLOBALS[$this->varname], $this->position, $count); $this->position += strlen($ret); return $ret; } function stream_write($data) { $left = substr($GLOBALS[$this->varname], 0, $this->position); $right = substr($GLOBALS[$this->varname], $this->position + strlen($data)); $GLOBALS[$this->varname] = $left . $data . $right; $this->position += strlen($data); return strlen($data); } function stream_tell() { return $this->position; } function stream_eof() { return $this->position >= strlen($GLOBALS[$this->varname]); } function stream_seek($offset, $whence) { switch($whence) { case SEEK_SET: if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) { $this->position = $offset; return true; } else { return false; } break; case SEEK_CUR: if ($offset >= 0) { $this->position += $offset; return true; } else { return false; } break; case SEEK_END: if (strlen($GLOBALS[$this->varname]) + $offset >= 0) { $this->position = strlen($GLOBALS[$this->varname]) + $offset; return true; } else { return false; } break; default: return false; } } } stream_register_wrapper("var", "VariableStream") or die("Failed to register protocol"); $myvar = ""; $fp = fopen("var://myvar", "r+"); fwrite($fp, "line1\n"); fwrite($fp, "line2\n"); fwrite($fp, "line3\n"); rewind($fp); while(!feof($fp)) { echo fgets($fp); } fclose($fp); var_dump($myvar); ?> -- Edit bug report at http://bugs.php.net/?id=20051&edit=1 -- Try a CVS snapshot: http://bugs.php.net/fix.php?id=20051&r=trysnapshot Fixed in CVS: http://bugs.php.net/fix.php?id=20051&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=20051&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=20051&r=needtrace Try newer version: http://bugs.php.net/fix.php?id=20051&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=20051&r=support Expected behavior: http://bugs.php.net/fix.php?id=20051&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=20051&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=20051&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=20051&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=20051&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=20051&r=dst IIS Stability: http://bugs.php.net/fix.php?id=20051&r=isapi