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