]> granicus.if.org Git - php/commitdiff
Fixed crash
authorDmitry Stogov <dmitry@php.net>
Wed, 18 Apr 2007 13:53:32 +0000 (13:53 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 18 Apr 2007 13:53:32 +0000 (13:53 +0000)
main/streams/plain_wrapper.c

index c809db4c2e0f9456aae72f655ff17b68e49bfa43..420f8a63c711bf72b8eb0898efc435957840e8c5 100644 (file)
@@ -718,8 +718,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 */