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

Reply via email to