1--TEST--
2Bug #79984 (Stream filter is not called with closing arg)
3--FILE--
4<?php
5
6class F extends php_user_filter
7{
8    public function onCreate(): bool
9    {
10        echo 'filter onCreate' . PHP_EOL;
11        return true;
12    }
13
14    public function onClose(): void
15    {
16        echo 'filter onClose' . PHP_EOL;
17    }
18
19    public function filter($in, $out, &$consumed, $closing): int
20    {
21        while ($bucket = stream_bucket_make_writeable($in)) {
22            $bucket->data = strtoupper($bucket->data);
23            $consumed     += $bucket->datalen;
24            stream_bucket_append($out, $bucket);
25        }
26        echo 'filtered ' . ($consumed ? $consumed : 0) . ' bytes';
27        if ($closing) {
28            echo ' and closing.';
29        } else {
30            echo '.';
31        }
32        if (feof($this->stream)) {
33            echo ' Stream has reached end-of-file.';
34        }
35        echo PHP_EOL;
36        return PSFS_PASS_ON;
37    }
38}
39
40stream_filter_register('f', 'F');
41
42$str = str_repeat('a', 8320);
43
44$f2 = fopen('php://temp', 'r+b');
45fwrite($f2, $str);
46fseek($f2, 0, SEEK_SET);
47stream_filter_append($f2, 'f', STREAM_FILTER_READ);
48var_dump(strlen(stream_get_contents($f2)));
49fclose($f2);
50
51?>
52--EXPECT--
53filter onCreate
54filtered 8192 bytes.
55filtered 128 bytes and closing. Stream has reached end-of-file.
56int(8320)
57filter onClose
58