aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dfilter
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2022-04-06 14:58:10 +0100
committerJoão Valverde <j@v6e.pt>2022-04-06 18:11:27 +0100
commita6f37323e612ff9b391cf0a3b3268c20d7971b22 (patch)
tree3a2ef87de2a334ecedb82198a9b8db4229f1125c /epan/dfilter
parent6057d1a6e2cb51c1a451af9d60c026dfa370c4fa (diff)
dfilter: Clean up lexical scanning
Diffstat (limited to 'epan/dfilter')
-rw-r--r--epan/dfilter/dfilter-int.h3
-rw-r--r--epan/dfilter/dfilter.c14
-rw-r--r--epan/dfilter/scanner.l36
-rw-r--r--epan/dfilter/syntax-tree.c3
4 files changed, 21 insertions, 35 deletions
diff --git a/epan/dfilter/dfilter-int.h b/epan/dfilter/dfilter-int.h
index b73cb77ffc..fc8657e79b 100644
--- a/epan/dfilter/dfilter-int.h
+++ b/epan/dfilter/dfilter-int.h
@@ -123,9 +123,6 @@ DfilterTrace(FILE *TraceFILE, char *zTracePrompt);
header_field_info *
dfilter_resolve_unparsed(dfwork_t *dfw, const char *name);
-char *
-dfilter_literal_normalized(const char *token);
-
const char *tokenstr(int token);
#endif
diff --git a/epan/dfilter/dfilter.c b/epan/dfilter/dfilter.c
index 1be1bfb924..62d42077db 100644
--- a/epan/dfilter/dfilter.c
+++ b/epan/dfilter/dfilter.c
@@ -86,9 +86,6 @@ dfilter_resolve_unparsed(dfwork_t *dfw, const char *name)
{
header_field_info *hfinfo;
- if (*name == '.')
- name += 1;
-
hfinfo = proto_registrar_get_byname(name);
if (hfinfo != NULL) {
/* It's a field name */
@@ -106,17 +103,6 @@ dfilter_resolve_unparsed(dfwork_t *dfw, const char *name)
return NULL;
}
-char *
-dfilter_literal_normalized(const char *token)
-{
- if (*token == '<') {
- char *end = strchr(token, '>');
- return g_strndup(token + 1, end - (token + 1));
- }
-
- return g_strdup(token);
-}
-
/* Initialize the dfilter module */
void
dfilter_init(void)
diff --git a/epan/dfilter/scanner.l b/epan/dfilter/scanner.l
index cd63e08e7e..a969ef1be0 100644
--- a/epan/dfilter/scanner.l
+++ b/epan/dfilter/scanner.l
@@ -364,7 +364,7 @@ v6-cidr-prefix \/[[:digit:]]{1,3}
/* None of the patterns below can match ".." anywhere in the token string. */
{MacAddress}|{QuadMacAddress} {
- /* MAC Address literal. */
+ /* MAC Address. */
return set_lval_str(TOKEN_UNPARSED, yytext);
}
@@ -378,27 +378,31 @@ v6-cidr-prefix \/[[:digit:]]{1,3}
return set_lval_str(TOKEN_UNPARSED, yytext);
}
-:?[[:xdigit:]]+:[[:xdigit:]:]* {
+[[:xdigit:]]+:[[:xdigit:]:]* {
/* Bytes. */
- if (yytext[0] == ':') {
- /* Skip leading colon. */
- return set_lval_str(TOKEN_LITERAL, yytext + 1);
- }
return set_lval_str(TOKEN_UNPARSED, yytext);
}
-"<"[^>=]+">" {
- /* Literal in-between angle brackets (cannot be parsed as a protocol field). */
- return set_lval_str(TOKEN_LITERAL, yytext);
+:[[:xdigit:]:-]+(\.[[:xdigit:]:-]+)* {
+ /* Literal starting with colon. Bytes, integer or float. */
+ /* Skip leading colon. */
+ return set_lval_str(TOKEN_LITERAL, yytext + 1);
}
-[:.]?[[:alnum:]_]{WORD_CHAR}*(\.{WORD_CHAR}+)* {
- /* Identifier or literal or unparsed. */
- if (yytext[0] == '.')
- return set_lval_str(TOKEN_IDENTIFIER, yytext);
- if (yytext[0] == ':') {
- /* Skip leading colon. */
- return set_lval_str(TOKEN_LITERAL, yytext + 1);
+"<"[^>=]+">" {
+ /* Literal in-between angle brackets (cannot be parsed as a protocol field). */
+ /* Strip brackets. */
+ char *end = strchr(yytext, '>');
+ *end = '\0';
+ df_lval->value = g_strdup(yytext + 1);
+ return TOKEN_LITERAL;
+}
+
+\.?[[:alnum:]_]{WORD_CHAR}*(\.{WORD_CHAR}+)* {
+ /* Identifier or unparsed. */
+ if (yytext[0] == '.') {
+ /* Skip leading dot. */
+ return set_lval_str(TOKEN_IDENTIFIER, yytext + 1);
}
return set_lval_str(TOKEN_UNPARSED, yytext);
}
diff --git a/epan/dfilter/syntax-tree.c b/epan/dfilter/syntax-tree.c
index fec54d5ba0..4f20c86295 100644
--- a/epan/dfilter/syntax-tree.c
+++ b/epan/dfilter/syntax-tree.c
@@ -185,8 +185,7 @@ stnode_new_unparsed(const char *str, char *token)
stnode_t *
stnode_new_literal(const char *str, char *token)
{
- char *value = dfilter_literal_normalized(str);
- return stnode_new(STTYPE_LITERAL, value, token);
+ return stnode_new(STTYPE_LITERAL, g_strdup(str), token);
}
stnode_t *