diff options
author | João Valverde <j@v6e.pt> | 2022-06-25 11:25:36 +0100 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2022-07-02 11:18:20 +0100 |
commit | b10db887ce9c5a4430d468eeebc8d7e42c6c6eb8 (patch) | |
tree | dc2c17e45069047f4508b86c2020cd30a2aa44a9 /epan/dfilter/dfunctions.c | |
parent | 190404d66bdb2573ca224967e368288b78fe525d (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.c | 9 |
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); |