fix: parsing handling negative values for the ports and threads

This commit is contained in:
0x35c
2025-06-17 21:47:13 +02:00
parent ff89de7fdc
commit a5d663fa9a

View File

@ -47,7 +47,7 @@ e_scantype parse_type(const char *arg)
for (size_t i = 0; i < 6; i++)
if (!strcmp(arg, types_str[i]))
return i;
dprintf(2, "ft_nmap: type: invalid argument: '%s'\n", arg);
dprintf(2, "ft_nmap: invalid argument to --scan: '%s'\n", arg);
return -1;
}
@ -80,6 +80,10 @@ int parse_ports(const char *arg, uint16_t *p_start, uint16_t *p_end)
arg, UINT16_MAX);
return -1;
}
if (start < 0 || end < 0) {
dprintf(2, "ft_nmap: invalid port value: %d\n", start);
return -1;
}
*p_start = start;
*p_end = end;
return 0;
@ -92,9 +96,13 @@ static int check_arg(e_flag flag, const char *arg)
{
switch (flag) {
case FL_SPEEDUP: {
for (size_t i = 0; arg[i]; i++)
if (!isdigit(arg[i]))
for (size_t i = 0; arg[i]; i++) {
if (!isdigit(arg[i])) {
dprintf(2, "ft_nmap: invalid argument: %s\n",
arg);
return -1;
}
}
int value = atoi(arg);
if (value < 0 || value > 250) {
dprintf(2,
@ -127,9 +135,9 @@ static int check_arg(e_flag flag, const char *arg)
"Invalid argument\n");
return -1;
} else if (nb < 0 || nb > 255) {
dprintf(
2,
"ft_nmap: invalid argument: '%s': out of range: 0 "
dprintf(2,
"ft_nmap: invalid argument: '%s': out "
"of range: 0 "
"<= value <= 255\n",
arg);
return -1;
@ -142,9 +150,9 @@ static int check_arg(e_flag flag, const char *arg)
dprintf(2, "ft_nmap: cannot set max_retries to 0\n");
return -1;
} else if (nb < 0 || nb > 255) {
dprintf(
2,
"ft_nmap: invalid argument: '%s': out of range: 0 "
dprintf(2,
"ft_nmap: invalid argument: '%s': out "
"of range: 0 "
"<= value <= 255\n",
arg);
return -1;
@ -233,6 +241,12 @@ int parsing(struct scan *general, const struct option_lst *options)
if (parse_ports(get_option_arg(options, FL_PORTS), &general->port_start,
&general->port_end))
return -1;
if (general->port_start <= 0 || general->port_end <= 0) {
dprintf(2, "ft_nmap: invalid port value: %d\n",
general->port_start <= 0 ? general->port_start
: general->port_end);
return -1;
}
general->type = parse_type(get_option_arg(options, FL_TYPE));
if ((int)general->type == -1)
return -1;
@ -243,7 +257,8 @@ int parsing(struct scan *general, const struct option_lst *options)
const char *nb_threads_str = get_option_arg(options, FL_SPEEDUP);
uint8_t nb_threads = nb_threads_str ? atoi(nb_threads_str) : 1;
if (general->port_end - general->port_start + 1 < nb_threads) {
dprintf(2, "ft_nmap: number of threads to use must be superior "
dprintf(2, "ft_nmap: number of threads to use must be "
"superior "
"or equals to the ports range\n");
return -1;
}