aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Hoersken <info@marc-hoersken.de>2015-12-23 14:19:36 +0100
committerMarc Hoersken <info@marc-hoersken.de>2015-12-23 14:19:36 +0100
commit7cbe4d8d7941225f18ab7e3dafd16a4d1bceb27b (patch)
tree2ea54c3a1f161dbdbf5137821debd0db4805fc86
parentfcabed6cd83f0737be0ee3721288a83a3cf6ab52 (diff)
ftplistparser.c: fix handling of file LISTings using Windows EOL
Previously file.txt[CR][LF] would have been returned as file.tx (without the last t) if filetype is symlink. Now the t is included and the internal item_length includes the zero byte. Spotted using test 576 on Windows.
-rw-r--r--lib/ftplistparser.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/lib/ftplistparser.c b/lib/ftplistparser.c
index 9ce8a764f..d87c4c526 100644
--- a/lib/ftplistparser.c
+++ b/lib/ftplistparser.c
@@ -728,7 +728,6 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_UNIX_FILENAME_NAME:
parser->item_length++;
if(c == '\r') {
- parser->item_length--;
parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_WINDOWSEOL;
}
else if(c == '\n') {
@@ -744,7 +743,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
break;
case PL_UNIX_FILENAME_WINDOWSEOL:
if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length] = 0;
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.filename = parser->item_offset;
parser->state.UNIX.main = PL_UNIX_FILETYPE;
result = ftp_pl_insert_finfo(conn, finfo);
@@ -835,9 +834,8 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
}
break;
case PL_UNIX_SYMLINK_TARGET:
- parser->item_length ++;
+ parser->item_length++;
if(c == '\r') {
- parser->item_length --;
parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_WINDOWSEOL;
}
else if(c == '\n') {