Skip to content

Commit d893404

Browse files
committed
Merge branch 'PHP-7.4' into master
* PHP-7.4: Fix #79423: copy command is limited to size of file it can copy
2 parents 12d087c + f445e9c commit d893404

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

main/streams/plain_wrapper.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,7 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void
774774
php_stream_mmap_range *range = (php_stream_mmap_range*)ptrparam;
775775
HANDLE hfile = (HANDLE)_get_osfhandle(fd);
776776
DWORD prot, acc, loffs = 0, delta = 0;
777+
LARGE_INTEGER file_size;
777778

778779
switch (value) {
779780
case PHP_STREAM_MMAP_SUPPORTED:
@@ -810,7 +811,22 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void
810811
return PHP_STREAM_OPTION_RETURN_ERR;
811812
}
812813

813-
size = GetFileSize(hfile, NULL);
814+
if (!GetFileSizeEx(hfile, &file_size)) {
815+
CloseHandle(data->file_mapping);
816+
data->file_mapping = NULL;
817+
return PHP_STREAM_OPTION_RETURN_ERR;
818+
}
819+
# if defined(_WIN64)
820+
size = file_size.QuadPart;
821+
# else
822+
if (file_size.HighPart) {
823+
CloseHandle(data->file_mapping);
824+
data->file_mapping = NULL;
825+
return PHP_STREAM_OPTION_RETURN_ERR;
826+
} else {
827+
size = file_size.LowPart;
828+
}
829+
# endif
814830
if (range->offset > size) {
815831
range->offset = size;
816832
}

0 commit comments

Comments
 (0)