Skip to content

Commit 96aae52

Browse files
committed
Merge branch 'PHP-7.4'
2 parents b7a0e11 + 56a2ea7 commit 96aae52

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

ext/standard/tests/file/bug69100.phpt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
Bug #69100: Bus error from stream_copy_to_stream (file -> SSL stream) with invalid length
3+
--FILE--
4+
<?php
5+
6+
$fileIn = __DIR__ . '/bug69100_in.txt';
7+
$fileOut = __DIR__ . '/bug69100_out.txt';
8+
9+
file_put_contents($fileIn, str_repeat('A', 64 * 1024));
10+
$fr = fopen($fileIn, 'rb');
11+
$fw = fopen($fileOut, 'w');
12+
13+
var_dump(stream_copy_to_stream($fr, $fw, 32 * 1024));
14+
var_dump(stream_copy_to_stream($fr, $fw, 64 * 1024));
15+
16+
fclose($fr);
17+
fclose($fw);
18+
unlink($fileIn);
19+
unlink($fileOut);
20+
21+
?>
22+
--EXPECT--
23+
int(32768)
24+
int(32768)

main/streams/plain_wrapper.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -695,18 +695,15 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void
695695
return fd == -1 ? PHP_STREAM_OPTION_RETURN_ERR : PHP_STREAM_OPTION_RETURN_OK;
696696

697697
case PHP_STREAM_MMAP_MAP_RANGE:
698-
if(do_fstat(data, 1) != 0) {
698+
if (do_fstat(data, 1) != 0) {
699699
return PHP_STREAM_OPTION_RETURN_ERR;
700700
}
701-
if (range->length == 0 && range->offset > 0 && range->offset < data->sb.st_size) {
702-
range->length = data->sb.st_size - range->offset;
703-
}
704-
if (range->length == 0 || range->length > data->sb.st_size) {
705-
range->length = data->sb.st_size;
706-
}
707-
if (range->offset >= data->sb.st_size) {
701+
if (range->offset > data->sb.st_size) {
708702
range->offset = data->sb.st_size;
709-
range->length = 0;
703+
}
704+
if (range->length == 0 ||
705+
range->length > data->sb.st_size - range->offset) {
706+
range->length = data->sb.st_size - range->offset;
710707
}
711708
switch (range->mode) {
712709
case PHP_STREAM_MAP_MODE_READONLY:

0 commit comments

Comments
 (0)