tony2001 Wed Nov 29 11:10:49 2006 UTC Added files: /php-src/ext/standard/tests/file bug39673.phpt
Modified files: /php-src/main/streams plain_wrapper.c Log: fix #39673 (file_get_contents causes bus error on certain offsets) http://cvs.php.net/viewvc.cgi/php-src/main/streams/plain_wrapper.c?r1=1.78&r2=1.79&diff_format=u Index: php-src/main/streams/plain_wrapper.c diff -u php-src/main/streams/plain_wrapper.c:1.78 php-src/main/streams/plain_wrapper.c:1.79 --- php-src/main/streams/plain_wrapper.c:1.78 Thu Nov 16 16:08:09 2006 +++ php-src/main/streams/plain_wrapper.c Wed Nov 29 11:10:49 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: plain_wrapper.c,v 1.78 2006/11/16 16:08:09 bjori Exp $ */ +/* $Id: plain_wrapper.c,v 1.79 2006/11/29 11:10:49 tony2001 Exp $ */ #include "php.h" #include "php_globals.h" @@ -631,9 +631,16 @@ case PHP_STREAM_MMAP_MAP_RANGE: do_fstat(data, 1); + if (range->length == 0 && range->offset > 0 && range->offset < data->sb.st_size) { + range->length = data->sb.st_size - range->offset; + } if (range->length == 0 || range->length > data->sb.st_size) { range->length = data->sb.st_size; } + if (range->offset >= data->sb.st_size) { + range->offset = data->sb.st_size; + range->length = 0; + } switch (range->mode) { case PHP_STREAM_MAP_MODE_READONLY: prot = PROT_READ; http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/file/bug39673.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/file/bug39673.phpt +++ php-src/ext/standard/tests/file/bug39673.phpt --TEST-- Bug #39673 (file_get_contents causes bus error on certain offsets) --FILE-- <?php $str = str_repeat("test", 3456); $filename = dirname(__FILE__).'/bug39673.txt'; file_put_contents($filename, $str); $offsets = array( -1, 0, 3456*4, 3456*4 - 1, 3456*4 + 1, 2000, 5000, 100000, ); foreach ($offsets as $offset) { $r = file_get_contents($filename, false, null, $offset); var_dump(strlen($r)); } @unlink($filename); echo "Done\n"; ?> --EXPECTF-- int(13824) int(13824) int(0) int(1) int(0) int(11824) int(8824) int(0) Done -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php