aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dfilter/dfunctions.c
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2022-06-25 11:25:36 +0100
committerJoão Valverde <j@v6e.pt>2022-07-02 11:18:20 +0100
commitb10db887ce9c5a4430d468eeebc8d7e42c6c6eb8 (patch)
treedc2c17e45069047f4508b86c2020cd30a2aa44a9 /epan/dfilter/dfunctions.c
parent190404d66bdb2573ca224967e368288b78fe525d (diff)
dfilter: Remove unparsed syntax type and RHS literal bias
This removes unparsed name resolution during the semantic check because it feels like a hack to work around limitations in the language syntax, that should be solved at the lexical level instead. We were interpreting unparsed differently on the LHS and RHS. Now an unparsed value is always a field if it matches a registered field name (this matches the implementation in 3.6 and before). This requires tightening a bit the allowed filter names for protocols to avoid some common and potentially weird conflicting cases. Incidentally this extends set grammar to accept all entities. That is experimental and may be reverted in the future.
Diffstat (limited to 'epan/dfilter/dfunctions.c')
-rw-r--r--epan/dfilter/dfunctions.c9
1 files changed, 0 insertions, 9 deletions
diff --git a/epan/dfilter/dfunctions.c b/epan/dfilter/dfunctions.c
index 80b335274d..66099fd9f4 100644
--- a/epan/dfilter/dfunctions.c
+++ b/epan/dfilter/dfunctions.c
@@ -274,8 +274,6 @@ ul_semcheck_is_field_string(dfwork_t *dfw, const char *func_name, ftenum_t lhs_f
ws_assert(g_slist_length(param_list) == 1);
stnode_t *st_node = param_list->data;
- dfw_resolve_unparsed(dfw, st_node);
-
if (stnode_type_id(st_node) == STTYPE_FIELD) {
hfinfo = sttype_field_hfinfo(st_node);
if (IS_FT_STRING(hfinfo->type)) {
@@ -292,8 +290,6 @@ ul_semcheck_is_field(dfwork_t *dfw, const char *func_name, ftenum_t lhs_ftype _U
ws_assert(g_slist_length(param_list) == 1);
stnode_t *st_node = param_list->data;
- dfw_resolve_unparsed(dfw, st_node);
-
if (stnode_type_id(st_node) == STTYPE_FIELD)
return FT_UINT32;
@@ -309,8 +305,6 @@ ul_semcheck_string_param(dfwork_t *dfw, const char *func_name, ftenum_t lhs_ftyp
ws_assert(g_slist_length(param_list) == 1);
stnode_t *st_node = param_list->data;
- dfw_resolve_unparsed(dfw, st_node);
-
if (stnode_type_id(st_node) == STTYPE_FIELD) {
hfinfo = sttype_field_hfinfo(st_node);
switch (hfinfo->type) {
@@ -366,7 +360,6 @@ ul_semcheck_compare(dfwork_t *dfw, const char *func_name, ftenum_t lhs_ftype,
fvalue_t *fv;
arg = param_list->data;
- dfw_resolve_unparsed(dfw, arg);
if (stnode_type_id(arg) == STTYPE_ARITHMETIC) {
ftype = check_arithmetic_expr(dfw, arg, lhs_ftype);
@@ -390,7 +383,6 @@ ul_semcheck_compare(dfwork_t *dfw, const char *func_name, ftenum_t lhs_ftype,
for (l = param_list->next; l != NULL; l = l->next) {
arg = l->data;
- dfw_resolve_unparsed(dfw, arg);
if (stnode_type_id(arg) == STTYPE_ARITHMETIC) {
ft_arg = check_arithmetic_expr(dfw, arg, ftype);
@@ -436,7 +428,6 @@ ul_semcheck_absolute_value(dfwork_t *dfw, const char *func_name, ftenum_t lhs_ft
fvalue_t *fv;
st_node = param_list->data;
- dfw_resolve_unparsed(dfw, st_node);
if (stnode_type_id(st_node) == STTYPE_ARITHMETIC) {
ftype = check_arithmetic_expr(dfw, st_node, lhs_ftype);