From: Graham Leggett Date: Thu, 12 Oct 2006 23:17:43 +0000 (+0000) Subject: mod_disk_cache: Make sure that only positive integers are accepted X-Git-Tag: 2.2.4~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d9ff9a341f69c9c1f5a3825a93e962355452108;p=thirdparty%2Fapache%2Fhttpd.git mod_disk_cache: Make sure that only positive integers are accepted for the CacheMaxFileSize and CacheMinFileSize parameters in the config file. PR39380 +1: minfrin, jim, trawick git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@463506 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index e664540e790..28b8ce21860 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.4 + *) mod_disk_cache: Make sure that only positive integers are accepted + for the CacheMaxFileSize and CacheMinFileSize parameters in the + config file. PR39380 [Niklas Edmundsson ] + *) mod_cache: From RFC3986 (section 6.2.3.) if a URI contains an authority component and an empty path, the empty path is to be equivalent to "/". It explicitly cites the following four URIs as equivalents: diff --git a/STATUS b/STATUS index 79397fd9671..150d9b6a064 100644 --- a/STATUS +++ b/STATUS @@ -77,22 +77,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_cache: From RFC3986 (section 6.2.3.) if a URI contains an - authority component and an empty path, the empty path is to be equivalent - to "/". It explicitly cites the following four URIs as equivalents: - http://example.com - http://example.com/ - http://example.com:/ - http://example.com:80/ - Trunk: http://svn.apache.org/viewvc?view=rev&revision=450063 - +1: minfrin, rpluem, jim - - * mod_disk_cache: Make sure that only positive integers are accepted - for the CacheMaxFileSize and CacheMinFileSize parameters in the - config file. PR39380 - Trunk: http://svn.apache.org/viewvc?view=rev&revision=450042 - 2.2.x: http://people.apache.org/~minfrin/mod_disk_cache-lfsconfig-2.2.patch - +1: minfrin, jim, trawick PATCHES PROPOSED TO BACKPORT FROM TRUNK: diff --git a/modules/cache/mod_disk_cache.c b/modules/cache/mod_disk_cache.c index 15e333c0e0d..92c5ad7501b 100644 --- a/modules/cache/mod_disk_cache.c +++ b/modules/cache/mod_disk_cache.c @@ -1006,7 +1006,7 @@ static apr_status_t store_body(cache_handle_t *h, request_rec *r, if (dobj->file_size > conf->maxfs) { ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "cache_disk: URL %s failed the size check " - "(%" APR_OFF_T_FMT ">%" APR_SIZE_T_FMT ")", + "(%" APR_OFF_T_FMT " > %" APR_OFF_T_FMT ")", h->cache_obj->key, dobj->file_size, conf->maxfs); /* Remove the intermediate cache file and return non-APR_SUCCESS */ file_cache_errorcleanup(dobj, r); @@ -1030,7 +1030,7 @@ static apr_status_t store_body(cache_handle_t *h, request_rec *r, if (dobj->file_size < conf->minfs) { ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "cache_disk: URL %s failed the size check " - "(%" APR_OFF_T_FMT "<%" APR_SIZE_T_FMT ")", + "(%" APR_OFF_T_FMT " < %" APR_OFF_T_FMT ")", h->cache_obj->key, dobj->file_size, conf->minfs); /* Remove the intermediate cache file and return non-APR_SUCCESS */ file_cache_errorcleanup(dobj, r); @@ -1117,15 +1117,25 @@ static const char { disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, &disk_cache_module); - conf->minfs = atoi(arg); + + if (apr_strtoff(&conf->minfs, arg, NULL, 0) != APR_SUCCESS || + conf->minfs < 0) + { + return "CacheMinFileSize argument must be a non-negative integer representing the min size of a file to cache in bytes."; + } return NULL; } + static const char *set_cache_maxfs(cmd_parms *parms, void *in_struct_ptr, const char *arg) { disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, &disk_cache_module); - conf->maxfs = atoi(arg); + if (apr_strtoff(&conf->maxfs, arg, NULL, 0) != APR_SUCCESS || + conf->maxfs < 0) + { + return "CacheMaxFileSize argument must be a non-negative integer representing the max size of a file to cache in bytes."; + } return NULL; } diff --git a/modules/cache/mod_disk_cache.h b/modules/cache/mod_disk_cache.h index d9911795e7f..3c035543006 100644 --- a/modules/cache/mod_disk_cache.h +++ b/modules/cache/mod_disk_cache.h @@ -88,8 +88,8 @@ typedef struct { apr_size_t cache_root_len; int dirlevels; /* Number of levels of subdirectories */ int dirlength; /* Length of subdirectory names */ - apr_size_t minfs; /* minumum file size for cached files */ - apr_size_t maxfs; /* maximum file size for cached files */ + apr_off_t minfs; /* minimum file size for cached files */ + apr_off_t maxfs; /* maximum file size for cached files */ } disk_cache_conf; #endif /*MOD_DISK_CACHE_H*/