From 2874f6f52393495de8b31b6e5222441056fba9eb Mon Sep 17 00:00:00 2001 From: Guruswamy Basavaiah Date: Sun, 8 Jun 2014 00:44:16 +0530 Subject: cli: fix nft -i command crashes when try to input multi line command When try to input multiline command in "nft -i", it crashes. Issue is, function cli_append_multiline() return null in case of multiline command. But in the calling function cli_complete(), cli_exit is getting called, which in turn calls rl_callback_handler_remove() and the handler is getting removed. [root@localhost ~]# nft -i nft> add table filter nft> list table \ readline: readline_callback_read_char() called with no handler! Aborted (core dumped) [root@localhost ~]# After this patch, it shows: nft> list table \ .... filter table ip filter { } nft> The ".... " prompt is used to indicate a multiline command, similar to what Python does. Signed-off-by: Guruswamy Basavaiah Signed-off-by: Pablo Neira Ayuso --- src/cli.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/cli.c') diff --git a/src/cli.c b/src/cli.c index 8875207d..f748a0e2 100644 --- a/src/cli.c +++ b/src/cli.c @@ -66,6 +66,7 @@ static char *cli_append_multiline(char *line) multiline = line; rl_save_prompt(); rl_clear_message(); + rl_set_prompt(".... "); } else { len += strlen(multiline); s = xmalloc(len + 1); @@ -89,13 +90,16 @@ static void cli_complete(char *line) const char *c; LIST_HEAD(msgs); - line = cli_append_multiline(line); if (line == NULL) { printf("\n"); cli_exit(); - return; + exit(0); } + line = cli_append_multiline(line); + if (line == NULL) + return; + for (c = line; *c != '\0'; c++) if (!isspace(*c)) break; -- cgit v1.2.3