aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2023-11-05 17:41:05 +0000
committerJoão Valverde <j@v6e.pt>2023-11-05 21:28:22 +0000
commitd967ce3605ce580df95a6a9155c60a71dd07d5d4 (patch)
tree43970f9cd24b5307b65bef64426b7f97fe24148c
parentd661136b77038df58721f56ba04e23500f2b263e (diff)
dfilter: Fix scanner for protocol names starting with digit
Fixes #19466.
-rw-r--r--epan/dfilter/scanner.l6
-rw-r--r--test/suite_dfilter/group_membership.py2
-rw-r--r--test/suite_dfilter/group_syntax.py12
3 files changed, 16 insertions, 4 deletions
diff --git a/epan/dfilter/scanner.l b/epan/dfilter/scanner.l
index 2eca6cff2e..804858b2e8 100644
--- a/epan/dfilter/scanner.l
+++ b/epan/dfilter/scanner.l
@@ -114,8 +114,10 @@ FunctionIdentifier [[:alpha:]_][[:alnum:]_]*
* Some protocol names contain dots, e.g: _ws.expert
* Protocol or protocol field cannot contain DOTDOT anywhere.
*/
-VarIdentifier [[:alpha:]_][[:alnum:]_-]*
-ProtoFieldIdentifier {VarIdentifier}(\.{VarIdentifier})*
+VarIdentifier1 [[:alpha:]_][[:alnum:]_-]*
+VarIdentifier2 [[:alnum:]_]+
+ProtocolName {VarIdentifier1}|{VarIdentifier2}
+ProtoFieldIdentifier {ProtocolName}(\.{ProtocolName})*
hex2 [[:xdigit:]]{2}
ColonMacAddress {hex2}:{hex2}:{hex2}:{hex2}:{hex2}:{hex2}
diff --git a/test/suite_dfilter/group_membership.py b/test/suite_dfilter/group_membership.py
index 882cd00025..2b98365437 100644
--- a/test/suite_dfilter/group_membership.py
+++ b/test/suite_dfilter/group_membership.py
@@ -90,7 +90,7 @@ class TestDfilterMembership:
# expression should be parsed as "0.1 .. .7"
# .7 is the identifier (protocol) named "7"
dfilter = 'frame.time_delta in {0.1...7}'
- error = '"." was unexpected in this context'
+ error = '"7" is not a valid protocol or protocol field'
checkDFilterFail(dfilter, error)
def test_membership_10_bad_lhs_number(self, checkDFilterFail):
diff --git a/test/suite_dfilter/group_syntax.py b/test/suite_dfilter/group_syntax.py
index 24e239605c..afcb0bb0ed 100644
--- a/test/suite_dfilter/group_syntax.py
+++ b/test/suite_dfilter/group_syntax.py
@@ -14,10 +14,20 @@ class TestDfilterSyntax:
checkDFilterCount(dfilter, 1)
def test_exists_2(self, checkDFilterCount):
- # Identifier using minus
+ # Protocol using minus
dfilter = "mac-lte"
checkDFilterCount(dfilter, 0)
+ def test_exists_3(self, checkDFilterCount):
+ # Protocol starting with digit
+ dfilter = "9p or http"
+ checkDFilterCount(dfilter, 1)
+
+ def test_exists_4(self, checkDFilterCount):
+ # Protocol with dot
+ dfilter = "_ws.expert"
+ checkDFilterCount(dfilter, 1)
+
def test_commute_1(self, checkDFilterCount):
dfilter = "ip.proto == 6"
checkDFilterCount(dfilter, 1)