summaryrefslogtreecommitdiff
path: root/lib/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/command.c')
-rw-r--r--lib/command.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/command.c b/lib/command.c
index f97e37e8c6..e67007ae2f 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -2416,8 +2416,11 @@ cmd_complete_command_real (vector vline, struct vty *vty, int *status, int islib
/* Only one matched */
if (vector_slot (matchvec, 1) == NULL)
{
- match_str = (char **) matchvec->index;
- vector_only_wrapper_free (matchvec);
+ size_t index_size = matchvec->alloced * sizeof (void *);
+ match_str = XMALLOC (MTYPE_TMP, index_size);
+ memcpy (match_str, matchvec->index, index_size);
+ vector_free (matchvec);
+
*status = CMD_COMPLETE_FULL_MATCH;
return match_str;
}
@@ -2459,8 +2462,11 @@ cmd_complete_command_real (vector vline, struct vty *vty, int *status, int islib
/* Make new matchvec. */
matchvec = vector_init (INIT_MATCHVEC_SIZE);
vector_set (matchvec, lcdstr);
- match_str = (char **) matchvec->index;
- vector_only_wrapper_free (matchvec);
+
+ size_t index_size = matchvec->alloced * sizeof (void *);
+ match_str = XMALLOC (MTYPE_TMP, index_size);
+ memcpy (match_str, matchvec->index, index_size);
+ vector_free (matchvec);
*status = CMD_COMPLETE_MATCH;
return match_str;