. Fixed bug #78510 (Partially uninitialized buffer returned by
sodium_crypto_generichash_init()). (Frank Denis, cmb)
+- Standard:
+ . Fixed bug #78506 (Error in a php_user_filter::filter() is not reported).
+ (Nikita)
+
05 Sep 2019, PHP 7.4.0RC1
- Core:
--- /dev/null
+--TEST--
+Bug #78506: Error in a php_user_filter::filter() is not reported
+--FILE--
+<?php
+
+class MyFilter extends php_user_filter {
+ public function filter($in, $out, &$consumed, $closing)
+ {
+ stream_bucket_make_writeable($in);
+ return PSFS_ERR_FATAL;
+ }
+
+}
+
+stream_filter_register('filtername', MyFilter::class);
+
+$source_resource = fopen('php://memory', 'rb+');
+fwrite($source_resource, 'Test data');
+rewind($source_resource);
+
+stream_filter_prepend($source_resource,'filtername',STREAM_FILTER_READ);
+
+var_dump(stream_copy_to_stream($source_resource, fopen('php://memory', 'wb')));
+
+?>
+--EXPECT--
+bool(false)
while(1) {
size_t readchunk = sizeof(buf);
ssize_t didread;
+ char *writeptr;
if (maxlen && (maxlen - haveread) < readchunk) {
readchunk = maxlen - haveread;
}
didread = php_stream_read(src, buf, readchunk);
+ if (didread <= 0) {
+ *len = haveread;
+ return didread < 0 ? FAILURE : SUCCESS;
+ }
- if (didread > 0) {
- /* extra paranoid */
- char *writeptr;
-
- towrite = didread;
- writeptr = buf;
- haveread += didread;
-
- while (towrite) {
- ssize_t didwrite = php_stream_write(dest, writeptr, towrite);
- if (didwrite <= 0) {
- *len = haveread - (didread - towrite);
- return FAILURE;
- }
+ towrite = didread;
+ writeptr = buf;
+ haveread += didread;
- towrite -= didwrite;
- writeptr += didwrite;
+ while (towrite) {
+ ssize_t didwrite = php_stream_write(dest, writeptr, towrite);
+ if (didwrite <= 0) {
+ *len = haveread - (didread - towrite);
+ return FAILURE;
}
- } else {
- break;
+
+ towrite -= didwrite;
+ writeptr += didwrite;
}
if (maxlen - haveread == 0) {