ftp wildcard: fix int32_t and size/group mixups

This commit is contained in:
Pavel Raiskup 2010-05-15 21:58:50 +02:00 committed by Daniel Stenberg
parent 43b816538f
commit e4af5d6efc
2 changed files with 10 additions and 18 deletions

View File

@ -231,7 +231,7 @@ struct curl_fileinfo {
char *filename; char *filename;
curlfiletype filetype; curlfiletype filetype;
time_t time; time_t time;
int32_t perm; unsigned int perm;
int uid; int uid;
int gid; int gid;
curl_off_t size; curl_off_t size;
@ -246,7 +246,7 @@ struct curl_fileinfo {
char *target; /* pointer to the target filename of a symlink */ char *target; /* pointer to the target filename of a symlink */
} strings; } strings;
int32_t flags; unsigned int flags;
/* used internally */ /* used internally */
char * b_data; char * b_data;

View File

@ -465,7 +465,7 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
} }
} }
else if(parser->item_length == 10) { else if(parser->item_length == 10) {
int32_t perm; unsigned int perm;
if(c != ' ') { if(c != ' ') {
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST); PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
return bufflen; return bufflen;
@ -560,7 +560,7 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
finfo->b_data[parser->item_offset + parser->item_length - 1] = 0; finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.group = parser->item_offset; parser->offsets.group = parser->item_offset;
parser->state.UNIX.main = PL_UNIX_SIZE; parser->state.UNIX.main = PL_UNIX_SIZE;
parser->state.UNIX.sub.group = PL_UNIX_SIZE_PRESPACE; parser->state.UNIX.sub.size = PL_UNIX_SIZE_PRESPACE;
parser->item_offset = 0; parser->item_offset = 0;
parser->item_length = 0; parser->item_length = 0;
} }
@ -624,7 +624,7 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
case PL_UNIX_TIME_PART1: case PL_UNIX_TIME_PART1:
parser->item_length++; parser->item_length++;
if(c == ' ') { if(c == ' ') {
parser->state.UNIX.sub.size = PL_UNIX_TIME_PREPART2; parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART2;
} }
else if(!ISALNUM(c) && c != '.') { else if(!ISALNUM(c) && c != '.') {
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST); PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
@ -646,7 +646,7 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
case PL_UNIX_TIME_PART2: case PL_UNIX_TIME_PART2:
parser->item_length++; parser->item_length++;
if(c == ' ') { if(c == ' ') {
parser->state.UNIX.sub.size = PL_UNIX_TIME_PREPART3; parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART3;
} }
else if(!ISALNUM(c) && c != '.') { else if(!ISALNUM(c) && c != '.') {
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST); PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
@ -917,21 +917,13 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
finfo->size = curlx_strtoofft(finfo->b_data + parser->item_offset, finfo->size = curlx_strtoofft(finfo->b_data + parser->item_offset,
&endptr, 10); &endptr, 10);
if(!*endptr) { if(!*endptr) {
if(finfo->size < CURL_LLONG_MAX && if(finfo->size == CURL_LLONG_MAX ||
finfo->size > CURL_LLONG_MIN) { finfo->size == CURL_LLONG_MIN) {
}
else if(finfo->size == CURL_LLONG_MAX ||
finfo->size == CURL_LLONG_MIN) {
if(errno == ERANGE) { if(errno == ERANGE) {
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST); PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
return bufflen; return bufflen;
} }
} }
else {
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
return bufflen;
}
} }
else { else {
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST); PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
@ -974,7 +966,7 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
return bufflen; return bufflen;
} }
parser->state.NT.main = PL_WINNT_DATE; parser->state.NT.main = PL_WINNT_DATE;
parser->state.NT.sub.filename = 0; parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
} }
break; break;
case PL_WINNT_FILENAME_WINEOL: case PL_WINNT_FILENAME_WINEOL:
@ -986,7 +978,7 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
return bufflen; return bufflen;
} }
parser->state.NT.main = PL_WINNT_DATE; parser->state.NT.main = PL_WINNT_DATE;
parser->state.NT.sub.filename = 0; parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
} }
else { else {
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST); PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);