Commit e4af5d6e authored by Pavel Raiskup's avatar Pavel Raiskup Committed by Daniel Stenberg
Browse files

ftp wildcard: fix int32_t and size/group mixups

parent 43b81653
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -231,7 +231,7 @@ struct curl_fileinfo {
  char *filename;
  curlfiletype filetype;
  time_t time;
  int32_t perm;
  unsigned int perm;
  int uid;
  int gid;
  curl_off_t size;
@@ -246,7 +246,7 @@ struct curl_fileinfo {
    char *target; /* pointer to the target filename of a symlink */
  } strings;

  int32_t flags;
  unsigned int flags;

  /* used internally */
  char * b_data;
+8 −16
Original line number Diff line number Diff line
@@ -465,7 +465,7 @@ size_t ftp_parselist(char *buffer, size_t size, size_t nmemb, void *connptr)
          }
        }
        else if(parser->item_length == 10) {
          int32_t perm;
          unsigned int perm;
          if(c != ' ') {
            PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
            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;
            parser->offsets.group = parser->item_offset;
            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_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:
          parser->item_length++;
          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 != '.') {
            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:
          parser->item_length++;
          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 != '.') {
            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,
                                            &endptr, 10);
              if(!*endptr) {
                if(finfo->size < CURL_LLONG_MAX &&
                   finfo->size > CURL_LLONG_MIN) {

                }
                else if(finfo->size == CURL_LLONG_MAX ||
                if(finfo->size == CURL_LLONG_MAX ||
                   finfo->size == CURL_LLONG_MIN) {
                  if(errno == ERANGE) {
                    PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
                    return bufflen;
                  }
                }
                else {
                  PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
                  return bufflen;
                }
              }
              else {
                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;
            }
            parser->state.NT.main = PL_WINNT_DATE;
            parser->state.NT.sub.filename = 0;
            parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
          }
          break;
        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;
            }
            parser->state.NT.main = PL_WINNT_DATE;
            parser->state.NT.sub.filename = 0;
            parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
          }
          else {
            PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);