diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-09-16 11:03:57 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-09-17 10:17:38 +0200 |
commit | 55ee009aaa650553868509081f2e2c5e2915008c (patch) | |
tree | d9217f803b7b801f063b0f1204f7eab55bbbee9f /src/parser.y | |
parent | 102c30013e622a9ffdccace52dee2552b06e5d3d (diff) |
src: fix 'describe' command when passing wrong expressions
Before this patch:
# nft describe tcp foo
value expression, datatype inet_proto (Internet protocol) (basetype integer), 8 bits
Segmentation fault
After this patch:
# nft describe tcp foo
<cmdline>:1:14-16: Error: syntax error, unexpected string, expecting end of file or newline or semicolon
describe tcp foo
^^^
Reported-by: Kevin Fenzi <kevin@scrye.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/parser.y')
-rw-r--r-- | src/parser.y | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/parser.y b/src/parser.y index 653c7649..ac3d890f 100644 --- a/src/parser.y +++ b/src/parser.y @@ -383,8 +383,8 @@ static void location_update(struct location *loc, struct location *rhs, int n) %type <cmd> line %destructor { cmd_free($$); } line -%type <cmd> base_cmd add_cmd create_cmd insert_cmd delete_cmd list_cmd flush_cmd rename_cmd export_cmd monitor_cmd -%destructor { cmd_free($$); } base_cmd add_cmd create_cmd insert_cmd delete_cmd list_cmd flush_cmd rename_cmd export_cmd monitor_cmd +%type <cmd> base_cmd add_cmd create_cmd insert_cmd delete_cmd list_cmd flush_cmd rename_cmd export_cmd monitor_cmd describe_cmd +%destructor { cmd_free($$); } base_cmd add_cmd create_cmd insert_cmd delete_cmd list_cmd flush_cmd rename_cmd export_cmd monitor_cmd describe_cmd %type <handle> table_spec tables_spec chain_spec chain_identifier ruleid_spec ruleset_spec %destructor { handle_free(&$$); } table_spec tables_spec chain_spec chain_identifier ruleid_spec ruleset_spec @@ -614,12 +614,7 @@ base_cmd : /* empty */ add_cmd { $$ = $1; } | RENAME rename_cmd { $$ = $2; } | EXPORT export_cmd { $$ = $2; } | MONITOR monitor_cmd { $$ = $2; } - | DESCRIBE primary_expr - { - expr_describe($2); - expr_free($2); - $$ = NULL; - } + | DESCRIBE describe_cmd { $$ = $2; } ; add_cmd : TABLE table_spec @@ -865,6 +860,14 @@ monitor_object : /* empty */ } ; +describe_cmd : primary_expr + { + struct handle h = { .family = NFPROTO_UNSPEC }; + $$ = cmd_alloc(CMD_DESCRIBE, CMD_OBJ_EXPR, &h, &@$, NULL); + $$->expr = $1; + } + ; + output_format : /* empty */ { $$ = NFT_OUTPUT_DEFAULT; |