From: Quentin Young Date: Tue, 13 Sep 2016 01:16:22 +0000 (+0000) Subject: lib: Fix various matching bugs X-Git-Tag: frr-3.0-branchpoint~129^2~234 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=ee551f4827cf861c84916726ceea0e3bb8afc46c;p=matthieu%2Ffrr.git lib: Fix various matching bugs Missed a copy, disambigs forgot to walkback Signed-off-by: Quentin Young --- diff --git a/lib/command_match.c b/lib/command_match.c index 68dda6f9cd..3faa059a44 100644 --- a/lib/command_match.c +++ b/lib/command_match.c @@ -208,7 +208,8 @@ command_match_r (struct graph_node *start, vector vline, unsigned int n) // that all nodes have the same data type, so when // deleting this list the last node must be // manually deleted - listnode_add (currbest, leaf->data); + struct cmd_element *el = leaf->data; + listnode_add (currbest, copy_cmd_element (el)); currbest->del = (void (*)(void *)) &del_cmd_token; break; } @@ -533,8 +534,10 @@ disambiguate (struct list *first, char *token = vector_slot(vline, i); if ((best = disambiguate_tokens (ftok, stok, token))) return best == ftok ? first : second; - ftok = listgetdata (listnextnode (fnode)); - stok = listgetdata (listnextnode (snode)); + fnode = listnextnode (fnode); + snode = listnextnode (snode); + ftok = listgetdata (fnode); + stok = listgetdata (snode); } return NULL; diff --git a/lib/command_parse.y b/lib/command_parse.y index a5d391d19e..bd958c5ace 100644 --- a/lib/command_parse.y +++ b/lib/command_parse.y @@ -446,7 +446,7 @@ doc_next() { char *piece = NULL; if (!docstr || !(piece = strsep (&docstr, "\n"))) - return NULL; + return XSTRDUP (MTYPE_CMD_TOKENS, ""); return XSTRDUP (MTYPE_CMD_TOKENS, piece); }