]> granicus.if.org Git - apache/commitdiff
Provide some cast safety tests and close the _last_ of the build errors
authorWilliam A. Rowe Jr <wrowe@apache.org>
Tue, 31 Jul 2001 16:34:14 +0000 (16:34 +0000)
committerWilliam A. Rowe Jr <wrowe@apache.org>
Tue, 31 Jul 2001 16:34:14 +0000 (16:34 +0000)
  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

modules/cache/mod_file_cache.c
modules/dav/fs/lock.c

index a07d25ca57f75c389ffeca62ef9bc459b3303a11..8f11ce35b1e298a0bc466711e389215de70db9f7 100644 (file)
@@ -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);
index cd7c43188d3a17ba0717cff51499bc7740f3636c..073fa80b750768a011bd6a7fcb115ee6f6c23a2b 100644 (file)
@@ -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,