diff options
author | Marc Hoersken <info@marc-hoersken.de> | 2015-12-23 14:19:36 +0100 |
---|---|---|
committer | Marc Hoersken <info@marc-hoersken.de> | 2015-12-23 14:19:36 +0100 |
commit | 7cbe4d8d7941225f18ab7e3dafd16a4d1bceb27b (patch) | |
tree | 2ea54c3a1f161dbdbf5137821debd0db4805fc86 /lib/ftplistparser.c | |
parent | fcabed6cd83f0737be0ee3721288a83a3cf6ab52 (diff) | |
download | curl-7cbe4d8d7941225f18ab7e3dafd16a4d1bceb27b.tar.gz |
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.
Diffstat (limited to 'lib/ftplistparser.c')
-rw-r--r-- | lib/ftplistparser.c | 6 |
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') { |