Dominick Meglio implemented CURLOPT_MAXFILESIZE and --max-filesize.

This commit is contained in:
Daniel Stenberg 2003-10-17 13:11:00 +00:00
parent 94568f884d
commit ce5db9a86e
11 changed files with 60 additions and 7 deletions

View file

@ -1777,8 +1777,13 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
downloads and when talking to servers that don't give away the size
in the RETR response line. */
result = ftp_getsize(conn, ftp->file, &foundsize);
if(CURLE_OK == result)
if(CURLE_OK == result) {
if (data->set.max_filesize && foundsize > data->set.max_filesize) {
failf(data, "Maximum file size exceeded");
return CURLE_FILESIZE_EXCEEDED;
}
downloadsize = foundsize;
}
if(conn->resume_from) {

View file

@ -578,6 +578,11 @@ CURLcode Curl_readwrite(struct connectdata *conn,
/* check for Content-Length: header lines to get size */
if (checkprefix("Content-Length:", k->p) &&
sscanf (k->p+15, " %ld", &k->contentlength)) {
if (data->set.max_filesize && k->contentlength >
data->set.max_filesize) {
failf(data, "Maximum file size exceeded");
return CURLE_FILESIZE_EXCEEDED;
}
conn->size = k->contentlength;
Curl_pgrsSetDownloadSize(data, k->contentlength);
}

View file

@ -1238,6 +1238,13 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...)
data->set.http200aliases = va_arg(param, struct curl_slist *);
break;
case CURLOPT_MAXFILESIZE:
/*
* Set the maximum size of a file to download.
*/
data->set.max_filesize = va_arg(param, long);
break;
default:
/* unknown tag and its companion, just ignore: */
return CURLE_FAILED_INIT; /* correct this */

View file

@ -828,6 +828,8 @@ struct UserDefined {
struct curl_slist *http200aliases; /* linked list of aliases for http200 */
int ip_version;
long max_filesize; /* Maximum file size to download */
/* Here follows boolean settings that define how to behave during
this session. They are STATIC, set by libcurl users or at least initially