iliaa           Thu Mar 18 12:15:48 2004 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src    NEWS 
    /php-src/ext/ftp    ftp.c 
  Log:
  MFH: Fixed bug #27633 (Incorrect EOL translation by ftp_get() in ASCII
  mode).
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1247.2.604&r2=1.1247.2.605&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1247.2.604 php-src/NEWS:1.1247.2.605
--- php-src/NEWS:1.1247.2.604   Wed Mar 17 20:35:49 2004
+++ php-src/NEWS        Thu Mar 18 12:15:26 2004
@@ -1,6 +1,6 @@
 PHP 4                                                                      NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-?? Feb 2004, Version 4.3.5
+18 Mar 2004, Version 4.3.5RC4
 - Fixed possible crash using an invalid color index with a palette image in
   imagecolortransparent (Pierre)
 - Fixed php-cgi to not ignore command-line switches when run in a web context.
@@ -10,7 +10,9 @@
   actually parsed. (Jon)
 - Fixed possible crashes inside socket extension, due to missing check inside
   allocation functions. (Ilia)
-- Fixed bug #27600 (GCC 3.0.4 does not like __attribute__ directive). (Ilia)
+- Fixed bug #27633 (Incorrect EOL translation by ftp_get() in ASCII mode).
+  (Ilia)
+- Fixed bug #27600 (GCC 3.0.4 does not like __attribute__ directive). (Sascha)
 - Fixed bug #27590 (crash during shutdown when freeing persistent resources
   in ZTS mode). (Ilia)
 - Fixed bug #27582 (possible crashes in imagefilltoborder()). (Pierre)
http://cvs.php.net/diff.php/php-src/ext/ftp/ftp.c?r1=1.68.2.15&r2=1.68.2.16&ty=u
Index: php-src/ext/ftp/ftp.c
diff -u php-src/ext/ftp/ftp.c:1.68.2.15 php-src/ext/ftp/ftp.c:1.68.2.16
--- php-src/ext/ftp/ftp.c:1.68.2.15     Thu Mar  4 17:29:23 2004
+++ php-src/ext/ftp/ftp.c       Thu Mar 18 12:15:47 2004
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ftp.c,v 1.68.2.15 2004/03/04 22:29:23 pollita Exp $ */
+/* $Id: ftp.c,v 1.68.2.16 2004/03/18 17:15:47 iliaa Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -652,7 +652,6 @@
 ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, int 
resumepos)
 {
        databuf_t               *data = NULL;
-       char                    *ptr;
        int                     lastch;
        size_t                  rcvd;
        char                    arg[11];
@@ -703,12 +702,39 @@
                }
 
                if (type == FTPTYPE_ASCII) {
-                       for (ptr = data->buf; rcvd; rcvd--, ptr++) {
-                               if (lastch == '\r' && *ptr != '\n')
+                       char *s;
+                       char *ptr = data->buf;
+                       char *e = ptr + rcvd;
+                       /* logic depends on the OS EOL
+                        * Win32 -> \r\n
+                        * Everything Else \n
+                        */
+#ifdef PHP_WIN32
+                       while ((s = strpbrk(ptr, "\r\n"))) {
+                               if (*s == '\n') {
                                        php_stream_putc(outstream, '\r');
-                               if (*ptr != '\r')
-                                       php_stream_putc(outstream, *ptr);
-                               lastch = *ptr;
+                               } else if (*s == '\r' && *(s + 1) == '\n') {
+                                       s++;
+                               }
+                               s++;
+                               php_stream_write(outstream, ptr, (s - ptr));
+                               if (*(s - 1) == '\r') {
+                                       php_stream_putc(outstream, '\n');
+                               }
+                               ptr = s;
+                       }
+#else 
+                       while ((s = memchr(ptr, '\r', (e - ptr)))) {
+                               php_stream_write(outstream, ptr, (s - ptr));
+                               if (*(s + 1) == '\n') {
+                                       s++;
+                               }
+                               php_stream_putc(outstream, '\n');
+                               ptr = s + 1;
+                       }
+#endif
+                       if (ptr < e) {
+                               php_stream_write(outstream, ptr, (e - ptr));
                        }
                }
                else {
@@ -717,9 +743,6 @@
                }
        }
 
-       if (type == FTPTYPE_ASCII && lastch == '\r')
-               php_stream_putc(outstream, '\r');
-
        ftp->data = data = data_close(ftp, data);
 
        if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {

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

Reply via email to