Jani Taskinen <[EMAIL PROTECTED]> wrote:

> 
>     Shouldn't you MFH this now?
>     (not sure if it was done already :)
>     If you do MFH, don't forget to move the BFN from HEAD NEWS
>     to PHP_4_3 NEWS..

Well, I tried doing so, but I didn't because the patch would be too huge 
for a simple fix seemingly, due to the great difference of the fgetcsv() 
code at this time between the HEAD and the branch. The HEAD version 
was written by me from scratch so we'd be able to extend fgetcsv() more 
painlessly. Therefore it'd be a bad idea as long as no other good patch is 
proposed.

Moriyoshi

>     
>     --Jani
> 
> On Mon, 27 Oct 2003, Moriyoshi Koizumi wrote:
> 
> >moriyoshi            Mon Oct 27 17:36:45 2003 EDT
> >
> >  Modified files:              
> >    /php-src/ext/standard    file.c 
> >  Log:
> >  Fixed bug #26003 (fgetcsv() not binary-safe on null bytes)
> >  
> >  
> >Index: php-src/ext/standard/file.c
> >diff -u php-src/ext/standard/file.c:1.362 php-src/ext/standard/file.c:1.363
> >--- php-src/ext/standard/file.c:1.362        Sun Oct  5 09:59:15 2003
> >+++ php-src/ext/standard/file.c      Mon Oct 27 17:36:44 2003
> >@@ -21,7 +21,7 @@
> >    +----------------------------------------------------------------------+
> >  */
> > 
> >-/* $Id: file.c,v 1.362 2003/10/05 13:59:15 moriyoshi Exp $ */
> >+/* $Id: file.c,v 1.363 2003/10/27 22:36:44 moriyoshi Exp $ */
> > 
> > /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
> > 
> >@@ -1723,10 +1723,11 @@
> > static const char *php_fgetcsv_lookup_trailing_spaces(const char *ptr, size_t len, 
> > const char delimiter TSRMLS_DC)
> > {
> >     int inc_len;
> >-    size_t cnt = 0;
> >+    unsigned char last_chars[2] = { 0, 0 };
> > 
> >     while (len > 0) {
> >-            switch ((inc_len = _php_mblen(ptr, len))) {
> >+            inc_len = (*ptr == '\0' ? 1: _php_mblen(ptr, len));
> >+            switch (inc_len) {
> >                     case -2:
> >                     case -1:
> >                             inc_len = 1;
> >@@ -1734,20 +1735,25 @@
> >                     case 0:
> >                             goto quit_loop;
> >                     case 1:
> >-                            if (delimiter != *ptr && isspace((int)*(const unsigned 
> >char *)ptr)) {
> >-                                    cnt++;
> >-                                    break;
> >-                            }
> >-                            /* break is omitted intentionally */
> >                     default:
> >-                            cnt = 0;
> >+                            last_chars[0] = last_chars[1];
> >+                            last_chars[1] = *ptr;
> >                             break;
> >             }
> >             ptr += inc_len;
> >             len -= inc_len;
> >     }
> > quit_loop:
> >-    return ptr - cnt;
> >+    switch (last_chars[1]) {
> >+            case '\n':
> >+                    if (last_chars[0] == '\r') {
> >+                            return ptr - 2;
> >+                    }
> >+                    /* break is omitted intentionally */
> >+            case '\r':
> >+                    return ptr - 1;
> >+    }
> >+    return ptr;
> > }
> > 
> > /* {{{ proto array fgetcsv(resource fp [,int length [, string delimiter [, string 
> > enclosure]]])
> >@@ -1853,7 +1859,7 @@
> > 
> >             /* 1. Strip any leading space */
> >             for (;;) {
> >-                    inc_len = (bptr < limit ? _php_mblen(bptr, limit - bptr): 0);
> >+                    inc_len = (bptr < limit ? (*bptr == '\0' ? 1: _php_mblen(bptr, 
> >limit - bptr)): 0);
> >                     switch (inc_len) {
> >                             case -2:
> >                             case -1:
> >@@ -1882,7 +1888,7 @@
> > 
> >                     /* 2A. handle enclosure delimited field */
> >                     for (;;) {
> >-                            inc_len = (bptr < limit ? _php_mblen(bptr, limit - 
> >bptr): 0);
> >+                            inc_len = (bptr < limit ? (*bptr == '\0' ? 1: 
> >_php_mblen(bptr, limit - bptr)): 0);
> >                             switch (inc_len) {
> >                                     case 0:
> >                                             switch (state) {
> >@@ -2019,7 +2025,7 @@
> >                                             break;
> >                             }
> >                             bptr += inc_len;
> >-                            inc_len = (bptr < limit ? _php_mblen(bptr, limit - 
> >bptr): 0);
> >+                            inc_len = (bptr < limit ? (*bptr == '\0' ? 1: 
> >_php_mblen(bptr, limit - bptr)): 0);
> >                     }
> >             quit_loop_3:
> >                     comp_end = tptr;
> >@@ -2033,7 +2039,7 @@
> >                     hunk_begin = bptr;
> > 
> >                     for (;;) {
> >-                            inc_len = (bptr < limit ? _php_mblen(bptr, limit - 
> >bptr): 0);
> >+                            inc_len = (bptr < limit ? (*bptr == '\0' ? 1: 
> >_php_mblen(bptr, limit - bptr)): 0);
> >                             switch (inc_len) {
> >                                     case 0:
> >                                             goto quit_loop_4;
> >
> >
> 
> -- 
> https://www.paypal.com/xclick/[EMAIL PROTECTED]&no_note=1&tax=0&currency_code=EUR
>  

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to