From 15d0215b9ca91f4964ba3a5528b1f38f84aaf158 Mon Sep 17 00:00:00 2001
From: Klement Sekera <ksekera@cisco.com>
Date: Tue, 16 Nov 2021 12:14:40 +0100
Subject: misc: vppctl - fix coverity warning

Calculate space left to silence coverity.

Type: fix
Fixes: 31f192434660
Signed-off-by: Klement Sekera <ksekera@cisco.com>
Change-Id: I9cd2e91ce74444e2625bf86721a8d3e44bf6afdd
---
 src/vpp/app/vppctl.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

(limited to 'src')

diff --git a/src/vpp/app/vppctl.c b/src/vpp/app/vppctl.c
index de5572d6bfa..7166ce13689 100644
--- a/src/vpp/app/vppctl.c
+++ b/src/vpp/app/vppctl.c
@@ -169,7 +169,7 @@ main (int argc, char *argv[])
   struct termios tio;
   int efd = -1;
   char *cmd = 0;
-  int cmd_len = 0;
+  unsigned long cmd_len = 0;
   int do_quit = 0;
   int is_interactive = 0;
   int acked = 1;		/* counts messages from VPP; starts at 1 */
@@ -220,7 +220,7 @@ main (int argc, char *argv[])
     }
   if (cmd_len > 0)
     {
-      cmd_len++; // account for \n in the end
+      cmd_len++; // account for 0 at end
       cmd = malloc (cmd_len);
       if (!cmd)
 	{
@@ -229,10 +229,14 @@ main (int argc, char *argv[])
 	  goto done;
 	}
       memset (cmd, 0, cmd_len);
+      unsigned long space_left = cmd_len - 1; // reserve space for 0 at end
       while (argc--)
 	{
-	  strncat (cmd, *argv++, cmd_len);
-	  strncat (cmd, " ", cmd_len);
+	  strncat (cmd, *argv, space_left);
+	  space_left -= strlen (*argv);
+	  ++argv;
+	  strncat (cmd, " ", space_left);
+	  --space_left;
 	}
       cmd[cmd_len - 2] = '\n';
       cmd[cmd_len - 1] = 0;
-- 
cgit