wpa_supplicant: Parse int values in different bases and reject invalid
Instead of using atoi(), use strtol() which allows checking if the configuration values are valid integers and can understand more than just decimal (also hexadecimal and octal). This not only allows specifying some fields in hex (which can be useful) but also rejecting invalid configurations, e.g., disassoc_low_ack=27 * 2 which was previously read as just 27. Signed-hostap: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
725fc39e07
commit
eae3a584f5
1 changed files with 20 additions and 4 deletions
|
@ -178,10 +178,17 @@ static int wpa_config_parse_int(const struct parse_data *data,
|
|||
struct wpa_ssid *ssid,
|
||||
int line, const char *value)
|
||||
{
|
||||
int *dst;
|
||||
int val, *dst;
|
||||
char *end;
|
||||
|
||||
dst = (int *) (((u8 *) ssid) + (long) data->param1);
|
||||
*dst = atoi(value);
|
||||
val = strtol(value, &end, 0);
|
||||
if (*end) {
|
||||
wpa_printf(MSG_ERROR, "Line %d: invalid number \"%s\"",
|
||||
line, value);
|
||||
return -1;
|
||||
}
|
||||
*dst = val;
|
||||
wpa_printf(MSG_MSGDUMP, "%s=%d (0x%x)", data->name, *dst, *dst);
|
||||
|
||||
if (data->param3 && *dst < (long) data->param3) {
|
||||
|
@ -2590,9 +2597,18 @@ static int wpa_global_config_parse_int(const struct global_parse_data *data,
|
|||
struct wpa_config *config, int line,
|
||||
const char *pos)
|
||||
{
|
||||
int *dst;
|
||||
int val, *dst;
|
||||
char *end;
|
||||
|
||||
dst = (int *) (((u8 *) config) + (long) data->param1);
|
||||
*dst = atoi(pos);
|
||||
val = strtol(pos, &end, 0);
|
||||
if (*end) {
|
||||
wpa_printf(MSG_ERROR, "Line %d: invalid number \"%s\"",
|
||||
line, pos);
|
||||
return -1;
|
||||
}
|
||||
*dst = val;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "%s=%d", data->name, *dst);
|
||||
|
||||
if (data->param2 && *dst < (long) data->param2) {
|
||||
|
|
Loading…
Reference in a new issue