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