1
0
mirror of https://github.com/apache/httpd.git synced 2025-11-08 04:22:21 +03:00

mod_disk_cache: Make sure that only positive integers are accepted

for the CacheMaxFileSize and CacheMinFileSize parameters in the
config file. PR39380 [Niklas Edmundsson <nikke acc.umu.se>]


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@450042 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Graham Leggett
2006-09-26 13:29:09 +00:00
parent 63da5dac63
commit cbf599cfd7
3 changed files with 22 additions and 8 deletions

View File

@@ -2,6 +2,10 @@
Changes with Apache 2.3.0 Changes with Apache 2.3.0
[Remove entries to the current 2.0 and 2.2 section below, when backported] [Remove entries to the current 2.0 and 2.2 section below, when backported]
*) mod_disk_cache: Make sure that only positive integers are accepted
for the CacheMaxFileSize and CacheMinFileSize parameters in the
config file. PR39380 [Niklas Edmundsson <nikke acc.umu.se>]
*) mod_proxy_balancer: Set the new environment variable BALANCER_ROUTE_CHANGED *) mod_proxy_balancer: Set the new environment variable BALANCER_ROUTE_CHANGED
if a worker with a route different from the one supplied by the client if a worker with a route different from the one supplied by the client
had been chosen or if the client supplied no routing information for had been chosen or if the client supplied no routing information for

View File

@@ -334,14 +334,14 @@ static int create_entity(cache_handle_t *h, request_rec *r, const char *key, apr
if (len > conf->maxfs) { if (len > conf->maxfs) {
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"disk_cache: URL %s failed the size check " "disk_cache: URL %s failed the size check "
"(%" APR_OFF_T_FMT " > %" APR_SIZE_T_FMT ")", "(%" APR_OFF_T_FMT " > %" APR_OFF_T_FMT ")",
key, len, conf->maxfs); key, len, conf->maxfs);
return DECLINED; return DECLINED;
} }
if (len >= 0 && len < conf->minfs) { if (len >= 0 && len < conf->minfs) {
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"disk_cache: URL %s failed the size check " "disk_cache: URL %s failed the size check "
"(%" APR_OFF_T_FMT " < %" APR_SIZE_T_FMT ")", "(%" APR_OFF_T_FMT " < %" APR_OFF_T_FMT ")",
key, len, conf->minfs); key, len, conf->minfs);
return DECLINED; return DECLINED;
} }
@@ -1026,7 +1026,7 @@ static apr_status_t store_body(cache_handle_t *h, request_rec *r,
if (dobj->file_size > conf->maxfs) { if (dobj->file_size > conf->maxfs) {
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"disk_cache: URL %s failed the size check " "disk_cache: 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); h->cache_obj->key, dobj->file_size, conf->maxfs);
/* Remove the intermediate cache file and return non-APR_SUCCESS */ /* Remove the intermediate cache file and return non-APR_SUCCESS */
file_cache_errorcleanup(dobj, r); file_cache_errorcleanup(dobj, r);
@@ -1050,7 +1050,7 @@ static apr_status_t store_body(cache_handle_t *h, request_rec *r,
if (dobj->file_size < conf->minfs) { if (dobj->file_size < conf->minfs) {
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"disk_cache: URL %s failed the size check " "disk_cache: 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); h->cache_obj->key, dobj->file_size, conf->minfs);
/* Remove the intermediate cache file and return non-APR_SUCCESS */ /* Remove the intermediate cache file and return non-APR_SUCCESS */
file_cache_errorcleanup(dobj, r); file_cache_errorcleanup(dobj, r);
@@ -1137,15 +1137,25 @@ static const char
{ {
disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
&disk_cache_module); &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; return NULL;
} }
static const char static const char
*set_cache_maxfs(cmd_parms *parms, void *in_struct_ptr, const char *arg) *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_conf *conf = ap_get_module_config(parms->server->module_config,
&disk_cache_module); &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; return NULL;
} }

View File

@@ -88,8 +88,8 @@ typedef struct {
apr_size_t cache_root_len; apr_size_t cache_root_len;
int dirlevels; /* Number of levels of subdirectories */ int dirlevels; /* Number of levels of subdirectories */
int dirlength; /* Length of subdirectory names */ int dirlength; /* Length of subdirectory names */
apr_size_t minfs; /* minumum file size for cached files */ apr_off_t minfs; /* minimum file size for cached files */
apr_size_t maxfs; /* maximum file size for cached files */ apr_off_t maxfs; /* maximum file size for cached files */
} disk_cache_conf; } disk_cache_conf;
#endif /*MOD_DISK_CACHE_H*/ #endif /*MOD_DISK_CACHE_H*/