mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-10 16:00:08 +00:00
MEDIUM: server: Tighten up parsing of weight string
Detect: * Empty weight string, including no digits before '%' in relative weight string * Trailing garbage, including between the last integer and '%' in relative weights The motivation for this is to allow the weight string to be safely logged if successfully parsed by this function Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
parent
58b5d292b3
commit
b796afa60d
11
src/server.c
11
src/server.c
@ -164,7 +164,8 @@ const char *server_parse_weight_change_request(struct server *sv,
|
||||
const char *weight_str)
|
||||
{
|
||||
struct proxy *px;
|
||||
int w;
|
||||
long int w;
|
||||
char *end;
|
||||
|
||||
px = sv->proxy;
|
||||
|
||||
@ -174,8 +175,10 @@ const char *server_parse_weight_change_request(struct server *sv,
|
||||
if (!*weight_str)
|
||||
return "Require <weight> or <weight%>.\n";
|
||||
|
||||
w = atoi(weight_str);
|
||||
if (strchr(weight_str, '%') != NULL) {
|
||||
w = strtol(weight_str, &end, 10);
|
||||
if (end == weight_str)
|
||||
return "Empty weight string empty or preceded by garbage";
|
||||
else if (end[0] == '%' && end[1] == '\0') {
|
||||
if (w < 0)
|
||||
return "Relative weight must be positive.\n";
|
||||
/* Avoid integer overflow */
|
||||
@ -187,6 +190,8 @@ const char *server_parse_weight_change_request(struct server *sv,
|
||||
}
|
||||
else if (w < 0 || w > 256)
|
||||
return "Absolute weight can only be between 0 and 256 inclusive.\n";
|
||||
else if (end[0] != '\0')
|
||||
return "Trailing garbage in weight string";
|
||||
|
||||
if (w && w != sv->iweight && !(px->lbprm.algo & BE_LB_PROP_DYN))
|
||||
return "Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.\n";
|
||||
|
Loading…
Reference in New Issue
Block a user