From: William A. Rowe Jr Date: Tue, 31 Jul 2001 16:34:14 +0000 (+0000) Subject: Provide some cast safety tests and close the _last_ of the build errors X-Git-Tag: 2.0.23~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8bc89dd503baf59225544d6a45ea5862992f1c6;p=thirdparty%2Fapache%2Fhttpd.git Provide some cast safety tests and close the _last_ of the build errors report (at -w3) by Win32 in the server. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89830 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/cache/mod_file_cache.c b/modules/cache/mod_file_cache.c index a07d25ca57f..8f11ce35b1e 100644 --- a/modules/cache/mod_file_cache.c +++ b/modules/cache/mod_file_cache.c @@ -206,6 +206,11 @@ static void cache_the_file(cmd_parms *cmd, const char *filename, int mmap) "mod_file_cache: %s isn't a regular file, skipping", fspec); return; } + if (tmp.finfo.size > AP_MAX_SENDFILE) { + ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, cmd->server, + "mod_file_cache: %s is too large to cache, skipping", fspec); + return; + } rc = apr_file_open(&fd, fspec, APR_READ | APR_BINARY | APR_XTHREAD, APR_OS_DEFAULT, cmd->pool); @@ -226,7 +231,8 @@ static void cache_the_file(cmd_parms *cmd, const char *filename, int mmap) * XXX: APR_HAS_LARGE_FILES issue; need to reject this request if * size is greater than MAX(apr_size_t) (perhaps greater than 1M?). */ - if ((rc = apr_mmap_create(&new_file->mm, fd, 0, new_file->finfo.size, + if ((rc = apr_mmap_create(&new_file->mm, fd, 0, + (apr_size_t)new_file->finfo.size, APR_MMAP_READ, cmd->pool)) != APR_SUCCESS) { apr_file_close(fd); ap_log_error(APLOG_MARK, APLOG_WARNING, rc, cmd->server, @@ -327,7 +333,7 @@ static int mmap_handler(request_rec *r, a_file *file) apr_bucket *b; apr_bucket_brigade *bb = apr_brigade_create(r->pool); - b = apr_bucket_mmap_create(file->mm, 0, file->finfo.size); + b = apr_bucket_mmap_create(file->mm, 0, (apr_size_t)file->finfo.size); APR_BRIGADE_INSERT_TAIL(bb, b); b = apr_bucket_eos_create(); APR_BRIGADE_INSERT_TAIL(bb, b); @@ -344,7 +350,8 @@ static int sendfile_handler(request_rec *r, a_file *file) apr_bucket *b; apr_bucket_brigade *bb = apr_brigade_create(r->pool); - b = apr_bucket_file_create(file->file, 0, file->finfo.size, r->pool); + b = apr_bucket_file_create(file->file, 0, + (apr_size_t)file->finfo.size, r->pool); APR_BRIGADE_INSERT_TAIL(bb, b); b = apr_bucket_eos_create(); APR_BRIGADE_INSERT_TAIL(bb, b); diff --git a/modules/dav/fs/lock.c b/modules/dav/fs/lock.c index cd7c43188d3..073fa80b750 100644 --- a/modules/dav/fs/lock.c +++ b/modules/dav/fs/lock.c @@ -845,8 +845,16 @@ static dav_error * dav_fs_load_locknull_list(apr_pool_t *p, const char *dirpath, goto loaderror; } - dav_set_bufsize(p, pbuf, finfo.size); - amt = finfo.size; + if (finfo.size != (apr_size_t)finfo.size) { + err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0, + apr_psprintf(p, + "Opened but rejected huge file %s", + pbuf->buf)); + goto loaderror; + } + + amt = (apr_size_t)finfo.size; + dav_set_bufsize(p, pbuf, amt); if (apr_file_read(file, pbuf->buf, &amt) != APR_SUCCESS || amt != finfo.size) { err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,