diff options
author | Jakub Grajciar <jgrajcia@cisco.com> | 2020-02-07 11:30:26 +0100 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2020-02-26 08:51:03 +0000 |
commit | 2dbee9361e74d03727a8b618ba80a5e28c006011 (patch) | |
tree | 443b6c39e99e0e46b62ef0dfd002e31bb1fa7665 /src/vat/api_format.c | |
parent | 8e755a16a71c55555f12381c8a12e22ae7138536 (diff) |
api: improve api string safety
- Remove vl_api_from_api_string
to prevent use of not nul-terminated strings.
- Rename vl_api_from_api_to_vec -> vl_api_from_api_to_new_vec
to imply a new vector is created. NOT nul terminated.
- Add vl_api_from_api_to_new_c_string. Returns
nul terminated string in a new vector.
- Add vl_api_c_string_to_api_string. Convert nul terminated
string to vl_api_string_t
- Add vl_api_vec_to_api_string. Convert NON nul terminated
vector to vl_api_string_t
Type: fix
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Change-Id: Iadd59b612c0d960a34ad0dd07a9d17f56435c6ea
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Diffstat (limited to 'src/vat/api_format.c')
-rw-r--r-- | src/vat/api_format.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/src/vat/api_format.c b/src/vat/api_format.c index acb173042db..f85e94a50b7 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -1127,18 +1127,12 @@ vl_api_cli_inband_reply_t_handler (vl_api_cli_inband_reply_t * mp) { vat_main_t *vam = &vat_main; i32 retval = ntohl (mp->retval); - u32 length = vl_api_string_len (&mp->reply); vec_reset_length (vam->cmd_reply); vam->retval = retval; if (retval == 0) - { - vec_validate (vam->cmd_reply, length); - clib_memcpy ((char *) (vam->cmd_reply), - vl_api_from_api_string (&mp->reply), length); - vam->cmd_reply[length] = 0; - } + vam->cmd_reply = vl_api_from_api_to_new_vec (&mp->reply); vam->result_ready = 1; } @@ -1147,16 +1141,18 @@ vl_api_cli_inband_reply_t_handler_json (vl_api_cli_inband_reply_t * mp) { vat_main_t *vam = &vat_main; vat_json_node_t node; + u8 *reply = 0; /* reply vector */ + reply = vl_api_from_api_to_new_vec (&mp->reply); vec_reset_length (vam->cmd_reply); vat_json_init_object (&node); vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_string_copy (&node, "reply", - vl_api_from_api_string (&mp->reply)); + vat_json_object_add_string_copy (&node, "reply", reply); vat_json_print (vam->ofp, &node); vat_json_free (&node); + vec_free (reply); vam->retval = ntohl (mp->retval); vam->result_ready = 1; @@ -5638,9 +5634,8 @@ exec_inband (vat_main_t * vam) * must be a vector ending in \n, not a C-string ending * in \n\0. */ - u32 len = vec_len (vam->input->buffer); - M2 (CLI_INBAND, mp, len); - vl_api_to_api_string (len - 1, (const char *) vam->input->buffer, &mp->cmd); + M2 (CLI_INBAND, mp, vec_len (vam->input->buffer)); + vl_api_vec_to_api_string (vam->input->buffer, &mp->cmd); S (mp); W (ret); |