diff options
author | João Valverde <j@v6e.pt> | 2023-11-05 17:41:05 +0000 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2023-11-05 21:28:22 +0000 |
commit | d967ce3605ce580df95a6a9155c60a71dd07d5d4 (patch) | |
tree | 43970f9cd24b5307b65bef64426b7f97fe24148c | |
parent | d661136b77038df58721f56ba04e23500f2b263e (diff) |
dfilter: Fix scanner for protocol names starting with digit
Fixes #19466.
-rw-r--r-- | epan/dfilter/scanner.l | 6 | ||||
-rw-r--r-- | test/suite_dfilter/group_membership.py | 2 | ||||
-rw-r--r-- | test/suite_dfilter/group_syntax.py | 12 |
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) |