mirror of
https://github.com/php/php-src.git
synced 2024-11-24 02:15:04 +08:00
Final set of fixes for bug #27633.
# Many thanks to Edin for helpind analyze and resolve this bug.
This commit is contained in:
parent
e6034763ca
commit
ff80321587
@ -846,25 +846,8 @@ ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type,
|
||||
* Everything Else \n
|
||||
*/
|
||||
#ifdef PHP_WIN32
|
||||
while ((s = strpbrk(ptr, "\r\n")) && (s < e)) {
|
||||
php_stream_write(outstream, ptr, (s - ptr));
|
||||
php_stream_write(outstream, "\r\n", sizeof("\r\n")-1);
|
||||
|
||||
if (*s == '\r') {
|
||||
s++;
|
||||
}
|
||||
/* for some reason some servers prefix a \r before a \n,
|
||||
* resulting in a \r\r\n in the buffer when
|
||||
* the remote file already has windoze style line endings.
|
||||
*/
|
||||
if (*s == '\r') {
|
||||
s++;
|
||||
}
|
||||
if (*s == '\n') {
|
||||
s++;
|
||||
}
|
||||
ptr = s;
|
||||
}
|
||||
php_stream_write(outstream, ptr, (e - ptr));
|
||||
ptr = e;
|
||||
#else
|
||||
while (e > ptr && (s = memchr(ptr, '\r', (e - ptr)))) {
|
||||
php_stream_write(outstream, ptr, (s - ptr));
|
||||
|
@ -679,6 +679,10 @@ PHP_FUNCTION(ftp_get)
|
||||
resumepos = 0;
|
||||
}
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
mode = FTPTYPE_IMAGE;
|
||||
#endif
|
||||
|
||||
if (ftp->autoseek && resumepos) {
|
||||
outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
|
||||
if (outstream == NULL) {
|
||||
@ -737,7 +741,9 @@ PHP_FUNCTION(ftp_nb_get)
|
||||
if (!ftp->autoseek && resumepos == PHP_FTP_AUTORESUME) {
|
||||
resumepos = 0;
|
||||
}
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
mode = FTPTYPE_IMAGE;
|
||||
#endif
|
||||
if (ftp->autoseek && resumepos) {
|
||||
outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
|
||||
if (outstream == NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user