summaryrefslogtreecommitdiff
path: root/main/streams/plain_wrapper.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-04-18 13:53:19 +0000
committerDmitry Stogov <dmitry@php.net>2007-04-18 13:53:19 +0000
commit02ee91dbb4b424adb6912076a0dd3e7b9a271f12 (patch)
tree5dc2616ca05aca3ffb040500c0c2074da5c87d39 /main/streams/plain_wrapper.c
parent72e7bfdedf831d9e5bc56d48f73aafe9b3f0255d (diff)
downloadphp-git-02ee91dbb4b424adb6912076a0dd3e7b9a271f12.tar.gz
Fixed crash
Diffstat (limited to 'main/streams/plain_wrapper.c')
-rw-r--r--main/streams/plain_wrapper.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index 4b83aa7189..877b605a7d 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -714,8 +714,16 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void
return PHP_STREAM_OPTION_RETURN_ERR;
}
- if (range->length == 0) {
- range->length = GetFileSize(hfile, NULL) - range->offset;
+ size = GetFileSize(hfile, NULL);
+ if (range->length == 0 && range->offset > 0 && range->offset < size) {
+ range->length = size - range->offset;
+ }
+ if (range->length == 0 || range->length > size) {
+ range->length = size;
+ }
+ if (range->offset >= size) {
+ range->offset = size;
+ range->length = 0;
}
/* figure out how big a chunk to map to be able to view the part that we need */