iliaa           Thu Dec  5 15:01:19 2002 EDT

  Modified files:              
    /php4/ext/standard  file.c 
    /php4/ext/standard/tests/file       bug12556.phpt 
  Log:
  Fixed bug #12556, updated the test for this bug.
  
  
Index: php4/ext/standard/file.c
diff -u php4/ext/standard/file.c:1.281 php4/ext/standard/file.c:1.282
--- php4/ext/standard/file.c:1.281      Sat Nov 30 14:12:48 2002
+++ php4/ext/standard/file.c    Thu Dec  5 15:01:18 2002
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: file.c,v 1.281 2002/11/30 19:12:48 iliaa Exp $ */
+/* $Id: file.c,v 1.282 2002/12/05 20:01:18 iliaa Exp $ */
 
 /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
 
@@ -2109,7 +2109,7 @@
        /* first section exactly as php_fgetss */
 
        zval **fd, **bytes, **p_delim, **p_enclosure;
-       int len;
+       int len, temp_len;
        char *buf;
        php_stream *stream;
 
@@ -2194,7 +2194,8 @@
 
        /* reserve workspace for building each individual field */
 
-       temp = emalloc(len);    /* unlikely but possible! */
+       temp_len = len;
+       temp = emalloc(temp_len + 1);   /* unlikely but possible! */
        tptr = temp;
 
        /* Initialize return array */
@@ -2209,7 +2210,7 @@
                /* 2. Read field, leaving bptr pointing at start of next field */
                if (enclosure && *bptr == enclosure) {
                        bptr++; /* move on to first character in field */
-                       
+
                        /* 2A. handle enclosure delimited field */
                        while (*bptr) {
                                if (*bptr == enclosure) {
@@ -2236,6 +2237,13 @@
                                                memset(buf, 0, len+1);
 
                                                if (php_stream_gets(stream, buf, len) 
== NULL) {
+                                                       /* we've got an unterminated 
+enclosure, assign all the data
+                                                        * from the start of the 
+enclosure to end of data to the last element
+                                                        */
+                                                       if (temp_len > len) { 
+                                                               break;
+                                                       }
+                                                       
                                                        efree(lineEnd); 
                                                        efree(temp); 
                                                        efree(buf);
@@ -2243,6 +2251,8 @@
                                                        RETURN_FALSE;
                                                }
 
+                                               temp_len += len;
+                                               temp = erealloc(temp, temp_len+1);
                                                bptr = buf;
                                                tptr = buf + strlen(buf) -1;
                                                while (isspace((int) *tptr) && 
(*tptr!=delimiter) && (tptr > bptr)) 
Index: php4/ext/standard/tests/file/bug12556.phpt
diff -u php4/ext/standard/tests/file/bug12556.phpt:1.1 
php4/ext/standard/tests/file/bug12556.phpt:1.2
--- php4/ext/standard/tests/file/bug12556.phpt:1.1      Thu Dec  5 14:29:45 2002
+++ php4/ext/standard/tests/file/bug12556.phpt  Thu Dec  5 15:01:19 2002
@@ -4,18 +4,46 @@
 --GET--
 --FILE--
 <?php
-$fp=fopen(dirname(__FILE__)."/test.csv", "r");
-while($line=fgetcsv($fp, 24)){
-       print("Read 24 bytes\n");
+$fp = fopen(dirname(__FILE__)."/test.csv", "r");
+while($line = fgetcsv($fp, 24)) {
+       var_dump($line);
 }
+fclose($fp);
 ?>
 --EXPECT--
-Read 24 bytes
-Read 24 bytes
-Read 24 bytes
-Read 24 bytes
-Read 24 bytes
-Read 24 bytes
-Read 24 bytes
-Read 24 bytes
-Read 24 bytes
+array(4) {
+  [0]=>
+  string(1) "6"
+  [1]=>
+  string(1) "7"
+  [2]=>
+  string(1) "8"
+  [3]=>
+  string(5) "line1"
+}
+array(4) {
+  [0]=>
+  string(1) "1"
+  [1]=>
+  string(1) "2"
+  [2]=>
+  string(1) "3"
+  [3]=>
+  string(186) "line2
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+2,4,5,line3
+"
+}



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to