aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2021-10-08 17:33:36 +0100
committerJoão Valverde <j@v6e.pt>2021-10-08 18:53:15 +0100
commit9d87c4712eb51fefa2ed1f7b023945d18c8cc6ca (patch)
tree1674fa512d09dbe657c0ea4fe5df245eaedced51
parent39e0b3155f62de73429416ce2d6aee8ceb7a5ec9 (diff)
dfilter: Fix parsing of value strings
If we have a STRING value in an expression and a numeric comparison we must also check if it matches a value string before throwing a type error. Add appropriate tests to the test suite. Fixes 4d2f4692129b1953c8631d58036bd6ce8cde6d50.
-rw-r--r--epan/dfilter/semcheck.c2
-rw-r--r--test/suite_dfilter/group_string_type.py8
-rw-r--r--test/suite_dfilter/group_syntax.py4
3 files changed, 13 insertions, 1 deletions
diff --git a/epan/dfilter/semcheck.c b/epan/dfilter/semcheck.c
index 3799f829b3..5c905c08a2 100644
--- a/epan/dfilter/semcheck.c
+++ b/epan/dfilter/semcheck.c
@@ -800,7 +800,7 @@ check_relation_LHS_FIELD(dfwork_t *dfw, const char *relation_string,
}
if (type2 == STTYPE_STRING) {
- fvalue = dfilter_fvalue_from_string(dfw, ftype1, st_arg2, NULL);
+ fvalue = dfilter_fvalue_from_string(dfw, ftype1, st_arg2, hfinfo1);
}
else if (type2 == STTYPE_CHARCONST &&
strcmp(relation_string, "contains") == 0) {
diff --git a/test/suite_dfilter/group_string_type.py b/test/suite_dfilter/group_string_type.py
index b6c4adfa0d..6ad989d6ae 100644
--- a/test/suite_dfilter/group_string_type.py
+++ b/test/suite_dfilter/group_string_type.py
@@ -177,3 +177,11 @@ class case_string(unittest.TestCase):
def test_contains_unicode(self, checkDFilterCount):
dfilter = 'tcp.flags.str contains "·······AP···"'
checkDFilterCount(dfilter, 1)
+
+ def test_value_string_1(self, checkDFilterCount):
+ dfilter = 'tcp.checksum.status == "Unverified" || tcp.checksum.status == "Good"'
+ checkDFilterCount(dfilter, 1)
+
+ def test_value_string_2(self, checkDFilterCount):
+ dfilter = 'tcp.checksum.status in {"Unverified" "Good"}'
+ checkDFilterCount(dfilter, 1)
diff --git a/test/suite_dfilter/group_syntax.py b/test/suite_dfilter/group_syntax.py
index 4a22548aec..7e1cfdacfd 100644
--- a/test/suite_dfilter/group_syntax.py
+++ b/test/suite_dfilter/group_syntax.py
@@ -26,3 +26,7 @@ class case_syntax(unittest.TestCase):
def test_func_1(self, checkDFilterCount):
dfilter = "len(frame) == 207"
checkDFilterCount(dfilter, 1)
+
+ def test_value_string_1(self, checkDFilterSucceed):
+ dfilter = 'eth.fcs.status=="Bad"'
+ checkDFilterSucceed(dfilter)