diff options
-rw-r--r-- | Zend/zend_stream.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c index 10183d664b..1b63daafd6 100644 --- a/Zend/zend_stream.c +++ b/Zend/zend_stream.c @@ -214,11 +214,18 @@ ZEND_API int zend_stream_fixup(zend_file_handle *file_handle, char **buf, size_t #if HAVE_MMAP if (file_handle->handle.fp) { /* *buf[size] is zeroed automatically by the kernel */ - *buf = mmap(0, size + ZEND_MMAP_AHEAD, PROT_READ, MAP_PRIVATE, fileno(file_handle->handle.fp), ftell(file_handle->handle.fp)); + *buf = mmap(0, size + ZEND_MMAP_AHEAD, PROT_READ, MAP_PRIVATE, fileno(file_handle->handle.fp), 0); if (*buf != MAP_FAILED) { - file_handle->handle.stream.mmap.len = size; + long offset = ftell(file_handle->handle.fp); file_handle->handle.stream.mmap.map = *buf; + + if (offset != -1) { + *buf += offset; + size -= offset; + } file_handle->handle.stream.mmap.buf = *buf; + file_handle->handle.stream.mmap.len = size; + goto return_mapped; } } |