Merge branch 'PHP-7.4'

This commit is contained in:
Nikita Popov 2019-09-11 10:32:27 +02:00
commit f10eb9f756
3 changed files with 44 additions and 19 deletions

View file

@ -91,9 +91,9 @@ static inline void strip_header(char *header_bag, char *lc_header_bag,
) { ) {
char *header_start = header_bag + (lc_header_start - lc_header_bag); char *header_start = header_bag + (lc_header_start - lc_header_bag);
char *lc_eol = strchr(lc_header_start, '\n'); char *lc_eol = strchr(lc_header_start, '\n');
char *eol = header_start + (lc_eol - lc_header_start);
if (lc_eol) { if (lc_eol) {
char *eol = header_start + (lc_eol - lc_header_start);
size_t eollen = strlen(lc_eol); size_t eollen = strlen(lc_eol);
memmove(lc_header_start, lc_eol+1, eollen); memmove(lc_header_start, lc_eol+1, eollen);

View file

@ -0,0 +1,27 @@
--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)

View file

@ -1586,16 +1586,17 @@ PHPAPI int _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size
while(1) { while(1) {
size_t readchunk = sizeof(buf); size_t readchunk = sizeof(buf);
ssize_t didread; ssize_t didread;
char *writeptr;
if (maxlen && (maxlen - haveread) < readchunk) { if (maxlen && (maxlen - haveread) < readchunk) {
readchunk = maxlen - haveread; readchunk = maxlen - haveread;
} }
didread = php_stream_read(src, buf, readchunk); didread = php_stream_read(src, buf, readchunk);
if (didread <= 0) {
if (didread > 0) { *len = haveread;
/* extra paranoid */ return didread < 0 ? FAILURE : SUCCESS;
char *writeptr; }
towrite = didread; towrite = didread;
writeptr = buf; writeptr = buf;
@ -1611,9 +1612,6 @@ PHPAPI int _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size
towrite -= didwrite; towrite -= didwrite;
writeptr += didwrite; writeptr += didwrite;
} }
} else {
break;
}
if (maxlen - haveread == 0) { if (maxlen - haveread == 0) {
break; break;