From a877f2d5f3ba7a036139f355e7067b002713772c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Valverde?= Date: Sun, 3 Jul 2022 23:07:36 +0100 Subject: dfilter: Allow existence check for slices Allow checking if a slice exists. The result is true if the slice has length greater than zero. The len() function is implemented as a DFVM instruction instead. The semantics are the same. --- test/suite_dfilter/group_range_method.py | 80 -------------------------- test/suite_dfilter/group_slice.py | 96 ++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 80 deletions(-) delete mode 100644 test/suite_dfilter/group_range_method.py create mode 100644 test/suite_dfilter/group_slice.py (limited to 'test') diff --git a/test/suite_dfilter/group_range_method.py b/test/suite_dfilter/group_range_method.py deleted file mode 100644 index 143b223cd0..0000000000 --- a/test/suite_dfilter/group_range_method.py +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright (c) 2013 by Gilbert Ramirez -# -# SPDX-License-Identifier: GPL-2.0-or-later - -import unittest -import fixtures -from suite_dfilter.dfiltertest import * - - -@fixtures.uses_fixtures -class case_range(unittest.TestCase): - trace_file = "ipx_rip.pcap" - - def test_slice_1_pos(self, checkDFilterCount): - dfilter = "ipx.src.node[1] == aa" - checkDFilterCount(dfilter, 1) - - def test_slice_2_pos(self, checkDFilterCount): - dfilter = "ipx.src.node[1] == bb" - checkDFilterCount(dfilter, 0) - - def test_slice_1_neg(self, checkDFilterCount): - dfilter = "ipx[-2:] == 04:53" - checkDFilterCount(dfilter, 1) - - def test_slice_1_hex_pos(self, checkDFilterCount): - dfilter = "ipx.src.node[1] == 0xaa" - checkDFilterCount(dfilter, 1) - - def test_slice_1_hex_neg(self, checkDFilterCount): - dfilter = "ipx.src.node[1] == 0xbb" - checkDFilterCount(dfilter, 0) - - def test_slice_2_pos(self, checkDFilterCount): - dfilter = "ipx.src.node[3:2] == a3:e3" - checkDFilterCount(dfilter, 1) - - def test_slice_2_neg(self, checkDFilterCount): - dfilter = "ipx.src.node[3:2] == cc:dd" - checkDFilterCount(dfilter, 0) - - def test_slice_string_1(self, checkDFilterFail): - dfilter = "frame == \"00\"[1]" - checkDFilterFail(dfilter, "Range is not supported for entity") - - def test_slice_unparsed_1(self, checkDFilterFail): - dfilter = "frame == b[1]" - checkDFilterFail(dfilter, "Range is not supported for entity") - - def test_slice_func_1(self, checkDFilterSucceed): - dfilter = "string(ipx.src.node)[3:2] == \"cc:dd\"" - checkDFilterSucceed(dfilter) - - # [i:j] i = start_offset, j = length - # [i-j] i = start_offset, j = end_offset, inclusive. - # [i] i = start_offset, length = 1 - # [:j] start_offset = 0, length = j - # [i:] start_offset = i, end_offset = end_of_field - - def test_slice_range_1(self, checkDFilterSucceed): - # :5 is a length - dfilter = "frame[5:5] == 11:22:33:44:55" - checkDFilterSucceed(dfilter) - - def test_slice_range_2(self, checkDFilterSucceed): - # end offset is inclusive - dfilter = "frame[5-10] == 11:22:33:44:55:66" - checkDFilterSucceed(dfilter) - - def test_slice_range_3(self, checkDFilterSucceed): - dfilter = "frame[5] == 11" - checkDFilterSucceed(dfilter) - - def test_slice_range_4(self, checkDFilterSucceed): - dfilter = "frame[:20] contains be:ef" - checkDFilterSucceed(dfilter) - - def test_slice_range_5(self, checkDFilterSucceed): - dfilter = "frame[20:] contains :12345678" - checkDFilterSucceed(dfilter) diff --git a/test/suite_dfilter/group_slice.py b/test/suite_dfilter/group_slice.py new file mode 100644 index 0000000000..4aa686c57c --- /dev/null +++ b/test/suite_dfilter/group_slice.py @@ -0,0 +1,96 @@ +# Copyright (c) 2013 by Gilbert Ramirez +# +# SPDX-License-Identifier: GPL-2.0-or-later + +import unittest +import fixtures +from suite_dfilter.dfiltertest import * + + +@fixtures.uses_fixtures +class case_range(unittest.TestCase): + trace_file = "ipx_rip.pcap" + + def test_slice_1_pos(self, checkDFilterCount): + dfilter = "ipx.src.node[1] == aa" + checkDFilterCount(dfilter, 1) + + def test_slice_2_pos(self, checkDFilterCount): + dfilter = "ipx.src.node[1] == bb" + checkDFilterCount(dfilter, 0) + + def test_slice_1_neg(self, checkDFilterCount): + dfilter = "ipx[-2:] == 04:53" + checkDFilterCount(dfilter, 1) + + def test_slice_1_hex_pos(self, checkDFilterCount): + dfilter = "ipx.src.node[1] == 0xaa" + checkDFilterCount(dfilter, 1) + + def test_slice_1_hex_neg(self, checkDFilterCount): + dfilter = "ipx.src.node[1] == 0xbb" + checkDFilterCount(dfilter, 0) + + def test_slice_2_pos(self, checkDFilterCount): + dfilter = "ipx.src.node[3:2] == a3:e3" + checkDFilterCount(dfilter, 1) + + def test_slice_2_neg(self, checkDFilterCount): + dfilter = "ipx.src.node[3:2] == cc:dd" + checkDFilterCount(dfilter, 0) + + def test_slice_string_1(self, checkDFilterFail): + dfilter = "frame == \"00\"[1]" + checkDFilterFail(dfilter, "Range is not supported for entity") + + def test_slice_unparsed_1(self, checkDFilterFail): + dfilter = "frame == b[1]" + checkDFilterFail(dfilter, "Range is not supported for entity") + + def test_slice_func_1(self, checkDFilterSucceed): + dfilter = "string(ipx.src.node)[3:2] == \"cc:dd\"" + checkDFilterSucceed(dfilter) + + # [i:j] i = start_offset, j = length + # [i-j] i = start_offset, j = end_offset, inclusive. + # [i] i = start_offset, length = 1 + # [:j] start_offset = 0, length = j + # [i:] start_offset = i, end_offset = end_of_field + + def test_slice_range_1(self, checkDFilterSucceed): + # :5 is a length + dfilter = "frame[5:5] == 11:22:33:44:55" + checkDFilterSucceed(dfilter) + + def test_slice_range_2(self, checkDFilterSucceed): + # end offset is inclusive + dfilter = "frame[5-10] == 11:22:33:44:55:66" + checkDFilterSucceed(dfilter) + + def test_slice_range_3(self, checkDFilterSucceed): + dfilter = "frame[5] == 11" + checkDFilterSucceed(dfilter) + + def test_slice_range_4(self, checkDFilterSucceed): + dfilter = "frame[:20] contains be:ef" + checkDFilterSucceed(dfilter) + + def test_slice_range_5(self, checkDFilterSucceed): + dfilter = "frame[20:] contains :12345678" + checkDFilterSucceed(dfilter) + + def test_slice_exists_1(self, checkDFilterCount): + dfilter = "frame[59]" + checkDFilterCount(dfilter, 1) + + def test_slice_exists_2(self, checkDFilterCount): + dfilter = "frame[60]" + checkDFilterCount(dfilter, 0) + + def test_slice_exists_3(self, checkDFilterCount): + dfilter = "frame[50-59]" + checkDFilterCount(dfilter, 1) + + def test_slice_exists_4(self, checkDFilterCount): + dfilter = "frame[50-60]" + checkDFilterCount(dfilter, 0) -- cgit v1.2.3