mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-17 02:56:51 +00:00
MINOR: cache: Avoid usage of atoi() when parsing "max-object-size".
With this patch we avoid parsing "max-object-size" with atoi() and we store its value as an unsigned int to prevent bad implicit conversion issues especially when we compare it with others unsigned value (content length).
This commit is contained in:
parent
4c8aa117f9
commit
4eba544e24
22
src/cache.c
22
src/cache.c
@ -50,7 +50,7 @@ struct cache {
|
||||
struct eb_root entries; /* head of cache entries based on keys */
|
||||
unsigned int maxage; /* max-age */
|
||||
unsigned int maxblocks;
|
||||
unsigned int maxobjsz; /* max-object-size */
|
||||
unsigned int maxobjsz; /* max-object-size (in bytes) */
|
||||
char id[33]; /* cache name */
|
||||
};
|
||||
|
||||
@ -878,6 +878,9 @@ int cfg_parse_cache(const char *file, int linenum, char **args, int kwm)
|
||||
|
||||
tmp_cache_config->maxage = atoi(args[1]);
|
||||
} else if (strcmp(args[0], "max-object-size") == 0) {
|
||||
unsigned int maxobjsz;
|
||||
char *err;
|
||||
|
||||
if (alertif_too_many_args(1, file, linenum, args, &err_code)) {
|
||||
err_code |= ERR_ABORT;
|
||||
goto out;
|
||||
@ -889,7 +892,14 @@ int cfg_parse_cache(const char *file, int linenum, char **args, int kwm)
|
||||
err_code |= ERR_WARN;
|
||||
}
|
||||
|
||||
tmp_cache_config->maxobjsz = atoi(args[1]);
|
||||
maxobjsz = strtoul(args[1], &err, 10);
|
||||
if (err == args[1] || *err != '\0') {
|
||||
ha_warning("parsing [%s:%d]: max-object-size wrong value '%s'\n",
|
||||
file, linenum, args[1]);
|
||||
err_code |= ERR_ABORT;
|
||||
goto out;
|
||||
}
|
||||
tmp_cache_config->maxobjsz = maxobjsz;
|
||||
}
|
||||
else if (*args[0] != 0) {
|
||||
ha_alert("parsing [%s:%d] : unknown keyword '%s' in 'cache' section\n", file, linenum, args[0]);
|
||||
@ -917,10 +927,16 @@ int cfg_post_parse_section_cache()
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!tmp_cache_config->maxobjsz)
|
||||
if (!tmp_cache_config->maxobjsz) {
|
||||
/* Default max. file size is a 256th of the cache size. */
|
||||
tmp_cache_config->maxobjsz =
|
||||
(tmp_cache_config->maxblocks * CACHE_BLOCKSIZE) >> 8;
|
||||
}
|
||||
else if (tmp_cache_config->maxobjsz > tmp_cache_config->maxblocks * CACHE_BLOCKSIZE / 2) {
|
||||
ha_alert("\"max-object-size\" is limited to an half of \"total-max-size\" => %u\n", tmp_cache_config->maxblocks * CACHE_BLOCKSIZE / 2);
|
||||
err_code |= ERR_FATAL | ERR_ALERT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret_shctx = shctx_init(&shctx, tmp_cache_config->maxblocks, CACHE_BLOCKSIZE,
|
||||
tmp_cache_config->maxobjsz, sizeof(struct cache), 1);
|
||||
|
Loading…
Reference in New Issue
Block a user