diff --git a/epan/dfilter/grammar.lemon b/epan/dfilter/grammar.lemon index 5584d78671..6cdd383ad3 100644 --- a/epan/dfilter/grammar.lemon +++ b/epan/dfilter/grammar.lemon @@ -380,13 +380,25 @@ slice(R) ::= entity(E) LBRACKET range_node_list(L) RBRACKET. range_node_list(L) ::= RANGE_NODE(N). { - L = g_slist_append(NULL, stnode_steal_data(N)); + char *err_msg = NULL; + drange_node *rn = drange_node_from_str(stnode_token(N), &err_msg); + if (err_msg != NULL) { + FAIL(dfw, N, "%s", err_msg); + g_free(err_msg); + } + L = g_slist_append(NULL, rn); stnode_free(N); } range_node_list(L) ::= range_node_list(P) COMMA RANGE_NODE(N). { - L = g_slist_append(P, stnode_steal_data(N)); + char *err_msg = NULL; + drange_node *rn = drange_node_from_str(stnode_token(N), &err_msg); + if (err_msg != NULL) { + FAIL(dfw, N, "%s", err_msg); + g_free(err_msg); + } + L = g_slist_append(P, rn); stnode_free(N); } diff --git a/epan/dfilter/scanner.l b/epan/dfilter/scanner.l index 7147e5625a..0369ef78ab 100644 --- a/epan/dfilter/scanner.l +++ b/epan/dfilter/scanner.l @@ -84,7 +84,6 @@ static int set_lval_str(df_scanner_state_t *state, int token, const char *token_ static int set_lval_quoted_string(df_scanner_state_t *state, int token, GString *quoted_string); static int set_lval_charconst(df_scanner_state_t *state, int token, GString *quoted_string); -static int set_lval_range_node(df_scanner_state_t *state, int token, const char *token_value); static int set_lval_field(df_scanner_state_t *state, int token, const char *token_value); #define simple(token) (update_location(yyextra, yytext), set_lval_simple(yyextra, token, yytext, STTYPE_UNINITIALIZED)) @@ -223,7 +222,7 @@ hyphen-bytes {hex2}(-{hex2})+ [^],]+ { update_location(yyextra, yytext); - return set_lval_range_node(yyextra, TOKEN_RANGE_NODE, yytext); + return set_lval_simple(yyextra, TOKEN_RANGE_NODE, yytext, STTYPE_UNINITIALIZED); } "," { @@ -582,23 +581,6 @@ set_lval_field(df_scanner_state_t *state, int token, const char *token_value) return token; } -static int -set_lval_range_node(df_scanner_state_t *state, int token, const char *token_value) -{ - ws_assert(token == TOKEN_RANGE_NODE); - char *err = NULL; - drange_node *range; - - range = drange_node_from_str(token_value, &err); - if (err != NULL) { - dfilter_fail(state->dfw, &state->location, "%s", err); - g_free(err); - return SCAN_FAILED; - } - stnode_init(df_lval, STTYPE_RANGE_NODE, range, g_strdup(token_value), &state->location); - return token; -} - static gboolean append_escaped_char(df_scanner_state_t *state, GString *str, char c) { diff --git a/epan/dfilter/semcheck.c b/epan/dfilter/semcheck.c index 618e66031a..c294390b27 100644 --- a/epan/dfilter/semcheck.c +++ b/epan/dfilter/semcheck.c @@ -541,7 +541,6 @@ check_exists(dfwork_t *dfw, stnode_t *st_arg1) case STTYPE_TEST: case STTYPE_FVALUE: case STTYPE_PCRE: - case STTYPE_RANGE_NODE: ws_assert_not_reached(); } } diff --git a/epan/dfilter/sttype-pointer.c b/epan/dfilter/sttype-pointer.c index 10593488d1..07401ad00d 100644 --- a/epan/dfilter/sttype-pointer.c +++ b/epan/dfilter/sttype-pointer.c @@ -87,21 +87,6 @@ out: return ws_strdup_printf("'\\x%02lx'", num); } -static void -range_node_free(void *data) -{ - /* If the data was not claimed with stnode_steal_data(), free it. */ - if (data) { - drange_node_free(data); - } -} - -static char * -range_node_tostr(const void *data, gboolean pretty _U_) -{ - return drange_node_tostr(data); -} - ftenum_t sttype_pointer_ftenum(stnode_t *node) { @@ -144,19 +129,10 @@ sttype_register_pointer(void) NULL, charconst_tostr }; - static sttype_t range_node_type = { - STTYPE_RANGE_NODE, - "RANGE_NODE", - NULL, - range_node_free, - NULL, - range_node_tostr - }; sttype_register(&fvalue_type); sttype_register(&pcre_type); sttype_register(&charconst_type); - sttype_register(&range_node_type); } /* diff --git a/epan/dfilter/syntax-tree.h b/epan/dfilter/syntax-tree.h index c739650717..b74fae4977 100644 --- a/epan/dfilter/syntax-tree.h +++ b/epan/dfilter/syntax-tree.h @@ -31,7 +31,6 @@ typedef enum { STTYPE_FIELD, STTYPE_FVALUE, STTYPE_SLICE, - STTYPE_RANGE_NODE, STTYPE_FUNCTION, STTYPE_SET, STTYPE_PCRE,