forked from osmocom/wireshark
dfilter: Make regex matches case insensitive by default
This commit is contained in:
parent
bd0f0cbbed
commit
de103394fe
|
@ -1148,7 +1148,7 @@ check_relation_matches(dfwork_t *dfw, stnode_t *st_node,
|
||||||
patt = stnode_data(st_arg2);
|
patt = stnode_data(st_arg2);
|
||||||
ws_debug("Compile regex pattern: %s", patt);
|
ws_debug("Compile regex pattern: %s", patt);
|
||||||
|
|
||||||
pcre = ws_regex_compile(patt, &errmsg);
|
pcre = ws_regex_compile_ex(patt, &errmsg, WS_REGEX_CASELESS|WS_REGEX_NEVER_UTF);
|
||||||
if (errmsg) {
|
if (errmsg) {
|
||||||
dfilter_fail(dfw, NULL, "Regex compilation error: %s.", errmsg);
|
dfilter_fail(dfw, NULL, "Regex compilation error: %s.", errmsg);
|
||||||
g_free(errmsg);
|
g_free(errmsg);
|
||||||
|
|
|
@ -428,6 +428,7 @@ libwsutil.so.0 libwsutil0 #MINVER#
|
||||||
ws_pipe_spawn_sync@Base 2.5.1
|
ws_pipe_spawn_sync@Base 2.5.1
|
||||||
ws_read_string_from_pipe@Base 2.5.0
|
ws_read_string_from_pipe@Base 2.5.0
|
||||||
ws_regex_compile@Base 3.7.0
|
ws_regex_compile@Base 3.7.0
|
||||||
|
ws_regex_compile_ex@Base 3.7.0
|
||||||
ws_regex_free@Base 3.7.0
|
ws_regex_free@Base 3.7.0
|
||||||
ws_regex_matches@Base 3.7.0
|
ws_regex_matches@Base 3.7.0
|
||||||
ws_regex_matches_length@Base 3.7.0
|
ws_regex_matches_length@Base 3.7.0
|
||||||
|
|
|
@ -53,6 +53,11 @@ class case_syntax(unittest.TestCase):
|
||||||
dfilter = r'http.host matches r"update\.microsoft\.c.."'
|
dfilter = r'http.host matches r"update\.microsoft\.c.."'
|
||||||
checkDFilterCount(dfilter, 1)
|
checkDFilterCount(dfilter, 1)
|
||||||
|
|
||||||
|
def test_matches_5(self, checkDFilterSucceed):
|
||||||
|
# case insensitive
|
||||||
|
dfilter = 'http.request.method matches "^head"'
|
||||||
|
checkDFilterSucceed(dfilter)
|
||||||
|
|
||||||
def test_equal_1(self, checkDFilterCount):
|
def test_equal_1(self, checkDFilterCount):
|
||||||
dfilter = 'ip.addr == 10.0.0.5'
|
dfilter = 'ip.addr == 10.0.0.5'
|
||||||
checkDFilterCount(dfilter, 1)
|
checkDFilterCount(dfilter, 1)
|
||||||
|
|
|
@ -43,16 +43,22 @@ get_error_msg(int errorcode)
|
||||||
|
|
||||||
|
|
||||||
static pcre2_code *
|
static pcre2_code *
|
||||||
compile_pcre2(const char *patt, char **errmsg)
|
compile_pcre2(const char *patt, char **errmsg, unsigned flags)
|
||||||
{
|
{
|
||||||
pcre2_code *code;
|
pcre2_code *code;
|
||||||
int errorcode;
|
int errorcode;
|
||||||
PCRE2_SIZE erroroffset;
|
PCRE2_SIZE erroroffset;
|
||||||
|
uint32_t options = 0;
|
||||||
|
|
||||||
|
if (flags & WS_REGEX_NEVER_UTF)
|
||||||
|
options |= PCRE2_NEVER_UTF;
|
||||||
|
if (flags & WS_REGEX_CASELESS)
|
||||||
|
options |= PCRE2_CASELESS;
|
||||||
|
|
||||||
/* By default UTF-8 is off. */
|
/* By default UTF-8 is off. */
|
||||||
code = pcre2_compile_8((PCRE2_SPTR)patt,
|
code = pcre2_compile_8((PCRE2_SPTR)patt,
|
||||||
PCRE2_ZERO_TERMINATED,
|
PCRE2_ZERO_TERMINATED,
|
||||||
PCRE2_NEVER_UTF,
|
options,
|
||||||
&errorcode,
|
&errorcode,
|
||||||
&erroroffset,
|
&erroroffset,
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -68,10 +74,16 @@ compile_pcre2(const char *patt, char **errmsg)
|
||||||
|
|
||||||
ws_regex_t *
|
ws_regex_t *
|
||||||
ws_regex_compile(const char *patt, char **errmsg)
|
ws_regex_compile(const char *patt, char **errmsg)
|
||||||
|
{
|
||||||
|
return ws_regex_compile_ex(patt, errmsg, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ws_regex_t *
|
||||||
|
ws_regex_compile_ex(const char *patt, char **errmsg, unsigned flags)
|
||||||
{
|
{
|
||||||
ws_return_val_if_null(patt, NULL);
|
ws_return_val_if_null(patt, NULL);
|
||||||
|
|
||||||
pcre2_code *code = compile_pcre2(patt, errmsg);
|
pcre2_code *code = compile_pcre2(patt, errmsg, flags);
|
||||||
if (code == NULL)
|
if (code == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,14 @@ typedef struct _ws_regex ws_regex_t;
|
||||||
WS_DLL_PUBLIC ws_regex_t *
|
WS_DLL_PUBLIC ws_regex_t *
|
||||||
ws_regex_compile(const char *patt, char **errmsg);
|
ws_regex_compile(const char *patt, char **errmsg);
|
||||||
|
|
||||||
|
#define WS_REGEX_CASELESS (1U << 0)
|
||||||
|
/* By default UTF-8 is off. This option also prevents it from being
|
||||||
|
* turned on using a pattern option. */
|
||||||
|
#define WS_REGEX_NEVER_UTF (1U << 1)
|
||||||
|
|
||||||
|
WS_DLL_PUBLIC ws_regex_t *
|
||||||
|
ws_regex_compile_ex(const char *patt, char **errmsg, unsigned flags);
|
||||||
|
|
||||||
/** Matches a null-terminated subject string. */
|
/** Matches a null-terminated subject string. */
|
||||||
WS_DLL_PUBLIC bool
|
WS_DLL_PUBLIC bool
|
||||||
ws_regex_matches(const ws_regex_t *re, const char *subj);
|
ws_regex_matches(const ws_regex_t *re, const char *subj);
|
||||||
|
|
Loading…
Reference in New Issue