String type: Not include \0 in show_version 03/16503/3
authorOle Troan <ot@cisco.com>
Sun, 16 Dec 2018 22:44:54 +0000 (23:44 +0100)
committerDamjan Marion <dmarion@me.com>
Mon, 17 Dec 2018 08:48:24 +0000 (08:48 +0000)
The string type does not include the \0 in strings.

Change-Id: I869f438b84880df40a018e43b4510194d84ce0fe
Signed-off-by: Ole Troan <ot@cisco.com>
src/vat/api_format.c
src/vlibapi/api_types.h
src/vpp/api/api.c

index f7e0767..4c43fcf 100644 (file)
@@ -1302,18 +1302,30 @@ static void vl_api_show_version_reply_t_handler
 
   if (retval >= 0)
     {
+      char *s;
       char *p = (char *) &mp->program;
-      errmsg ("        program: %s\n",
-             vl_api_from_api_string ((vl_api_string_t *) p));
-      p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32);
-      errmsg ("        version: %s\n",
-             vl_api_from_api_string ((vl_api_string_t *) p));
-      p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32);
-      errmsg ("     build date: %s\n",
-             vl_api_from_api_string ((vl_api_string_t *) p));
-      p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32);
-      errmsg ("build directory: %s\n",
-             vl_api_from_api_string ((vl_api_string_t *) p));
+
+      s = vl_api_from_api_string_c ((vl_api_string_t *) p);
+      errmsg ("        program: %s\n", s);
+      free (s);
+
+      p +=
+       vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t);
+      s = vl_api_from_api_string_c ((vl_api_string_t *) p);
+      errmsg ("        version: %s\n", s);
+      free (s);
+
+      p +=
+       vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t);
+      s = vl_api_from_api_string_c ((vl_api_string_t *) p);
+      errmsg ("     build date: %s\n", s);
+      free (s);
+
+      p +=
+       vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t);
+      s = vl_api_from_api_string_c ((vl_api_string_t *) p);
+      errmsg ("build directory: %s\n", s);
+      free (s);
     }
   vam->retval = retval;
   vam->result_ready = 1;
index ffcd24d..8a86612 100644 (file)
@@ -50,4 +50,10 @@ vl_api_string_len (vl_api_string_t * astr)
   return clib_net_to_host_u32 (astr->length);
 }
 
+static inline char *
+vl_api_from_api_string_c (vl_api_string_t *astr)
+{
+  return strndup((char *)astr->buf, clib_net_to_host_u32(astr->length));
+}
+
 #endif
index 8e2e4cd..3fce77a 100644 (file)
@@ -251,11 +251,10 @@ vl_api_show_version_t_handler (vl_api_show_version_t * mp)
   char *vpe_api_get_version (void);
   char *vpe_api_get_build_date (void);
 
-  u32 program_len = strnlen_s ("vpe", 32) + 1;
-  u32 version_len = strnlen_s (vpe_api_get_version (), 32) + 1;
-  u32 build_date_len = strnlen_s (vpe_api_get_build_date (), 32) + 1;
-  u32 build_directory_len =
-    strnlen_s (vpe_api_get_build_directory (), 256) + 1;
+  u32 program_len = strnlen_s ("vpe", 32);
+  u32 version_len = strnlen_s (vpe_api_get_version (), 32);
+  u32 build_date_len = strnlen_s (vpe_api_get_build_date (), 32);
+  u32 build_directory_len = strnlen_s (vpe_api_get_build_directory (), 256);
 
   u32 n = program_len + version_len + build_date_len + build_directory_len;