1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-07 13:11:28 +00:00

Fix an incorrect match case

This commit is contained in:
dmiller
2023-12-01 23:38:19 +00:00
parent b4404ad5dd
commit ee1d570b4e
2 changed files with 31 additions and 24 deletions

View File

@@ -355,34 +355,39 @@ bool expr_match(const char *val, size_t vlen, const char *expr, size_t explen, b
} }
} }
sublen = q ? q - p : explen - (p - expr); sublen = q ? q - p : explen - (p - expr);
if (*p == '>') { if (isxdigit(*subval)) {
if ((vlen > sublen - 1) if (*p == '>') {
|| (vlen == sublen - 1 && strncmp(subval, p + 1, vlen) > 0)) { if ((vlen > sublen - 1)
return true; || (vlen == sublen - 1 && strncmp(subval, p + 1, vlen) > 0)) {
return true;
}
goto next_expr;
} }
} else if (*p == '<') {
else if (*p == '<') { if ((vlen < sublen - 1)
if ((vlen < sublen - 1) || (vlen == sublen - 1 && strncmp(subval, p + 1, vlen) < 0)) {
|| (vlen == sublen - 1 && strncmp(subval, p + 1, vlen) < 0)) { return true;
return true; }
} goto next_expr;
} else { } else {
q1 = strchr(p, '-'); q1 = strchr(p, '-');
if (q1 != NULL) { if (q1 != NULL) {
size_t sublen1 = q1 - p; size_t sublen1 = q1 - p;
if ((vlen > sublen1) if ((vlen > sublen1)
|| (vlen == sublen1 && strncmp(subval, p, vlen) >= 0)) { || (vlen == sublen1 && strncmp(subval, p, vlen) >= 0)) {
p = q1 + 1; p = q1 + 1;
sublen -= (sublen1 + 1); sublen -= (sublen1 + 1);
if ((vlen < sublen) if ((vlen < sublen)
|| (vlen == sublen && strncmp(subval, p, vlen) <= 0)) { || (vlen == sublen && strncmp(subval, p, vlen) <= 0)) {
return true; return true;
}
} }
goto next_expr;
} }
} }
else if (vlen == sublen && !strncmp(p, subval, vlen)) { }
return true; if (vlen == sublen && !strncmp(p, subval, vlen)) {
} return true;
} }
next_expr: next_expr:
if (q) if (q)

View File

@@ -115,6 +115,8 @@ const struct expr_test tests[] = {
{"[<5]S", "2B", false}, {"[<5]S", "2B", false},
{"[>A7]S", "FS", false}, {"[>A7]S", "FS", false},
{"[>A7]S", "A6S", false}, {"[>A7]S", "A6S", false},
{"G", "0", false},
{"0-FFFF", "G", false},
{"", "", true} {"", "", true}
}; };