From: Marc Hoersken Date: Wed, 23 Dec 2015 13:19:36 +0000 (+0100) Subject: ftplistparser.c: fix handling of file LISTings using Windows EOL X-Git-Tag: curl-7_47_0~61 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7cbe4d8d7941225f18ab7e3dafd16a4d1bceb27b;p=curl 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. --- 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') {