diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-09-22 13:19:06 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-09-22 13:19:06 +0200 |
commit | d893404fb9e56ec2ac7ebb04b26eb47a566ff2d2 (patch) | |
tree | 053a32ac9259d249b93353d261eeea3410e62233 /main/streams | |
parent | 12d087c346592473a4e67e935a892e5f19de88b5 (diff) | |
parent | f445e9cb93eff1856748aaa6d020b74a653d2d76 (diff) | |
download | php-git-d893404fb9e56ec2ac7ebb04b26eb47a566ff2d2.tar.gz |
Merge branch 'PHP-7.4' into master
* PHP-7.4:
Fix #79423: copy command is limited to size of file it can copy
Diffstat (limited to 'main/streams')
-rw-r--r-- | main/streams/plain_wrapper.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index 9d21116707..4bb3205816 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -774,6 +774,7 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void php_stream_mmap_range *range = (php_stream_mmap_range*)ptrparam; HANDLE hfile = (HANDLE)_get_osfhandle(fd); DWORD prot, acc, loffs = 0, delta = 0; + LARGE_INTEGER file_size; switch (value) { case PHP_STREAM_MMAP_SUPPORTED: @@ -810,7 +811,22 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void return PHP_STREAM_OPTION_RETURN_ERR; } - size = GetFileSize(hfile, NULL); + if (!GetFileSizeEx(hfile, &file_size)) { + CloseHandle(data->file_mapping); + data->file_mapping = NULL; + return PHP_STREAM_OPTION_RETURN_ERR; + } +# if defined(_WIN64) + size = file_size.QuadPart; +# else + if (file_size.HighPart) { + CloseHandle(data->file_mapping); + data->file_mapping = NULL; + return PHP_STREAM_OPTION_RETURN_ERR; + } else { + size = file_size.LowPart; + } +# endif if (range->offset > size) { range->offset = size; } |