From 60ef94806076e728b6f76d5b9b874e375182233c Mon Sep 17 00:00:00 2001
From: haozi007 <liuhao27@huawei.com>
Date: Tue, 18 Oct 2022 15:47:36 +0800
Subject: [PATCH 23/43] improve code in utils.c

Signed-off-by: haozi007 <liuhao27@huawei.com>
---
 src/utils/cutils/utils.c | 60 ++++++++++++++++++++++------------------
 1 file changed, 33 insertions(+), 27 deletions(-)

diff --git a/src/utils/cutils/utils.c b/src/utils/cutils/utils.c
index e362581b..eddfda5c 100644
--- a/src/utils/cutils/utils.c
+++ b/src/utils/cutils/utils.c
@@ -64,13 +64,13 @@ int util_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize
     void *tmp = NULL;
 
     if (newptr == NULL || newsize == 0) {
-        goto err_out;
+        return -1;
     }
 
     tmp = util_common_calloc_s(newsize);
     if (tmp == NULL) {
         ERROR("Failed to malloc memory");
-        goto err_out;
+        return -1;
     }
 
     if (oldptr != NULL) {
@@ -82,9 +82,6 @@ int util_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize
 
     *newptr = tmp;
     return 0;
-
-err_out:
-    return -1;
 }
 
 static int util_read_pipe(int pipe_fd, char **out_buf, size_t *out_buf_size, size_t *out_real_size)
@@ -353,8 +350,6 @@ void util_contain_errmsg(const char *errmsg, int *exit_code)
     } else if (strcasestr(errmsg, "not a directory")) {
         *exit_code = 127;
     }
-
-    return;
 }
 
 char *util_short_digest(const char *digest)
@@ -818,6 +813,9 @@ bool util_exec_cmd(exec_func_t cb_func, void *args, const char *stdin_msg, char
     close(in_fd[1]);
     in_fd[1] = -1;
 
+    if (stdout_msg == NULL) {
+        stdout_close_flag = 1;
+    }
     for (;;) {
         if (stdout_close_flag == 0) {
             stdout_close_flag = util_read_pipe(out_fd[0], &stdout_buffer, &stdout_buf_size, &stdout_real_size);
@@ -840,8 +838,14 @@ bool util_exec_cmd(exec_func_t cb_func, void *args, const char *stdin_msg, char
     close(err_fd[0]);
     close(out_fd[0]);
 out:
-    *stdout_msg = stdout_buffer;
-    *stderr_msg = stderr_buffer;
+    if (stdout_msg != NULL) {
+        *stdout_msg = stdout_buffer;
+    }
+    if (stderr_msg != NULL) {
+        *stderr_msg = stderr_buffer;
+    } else {
+        free(stderr_buffer);
+    }
     return ret;
 }
 
@@ -947,8 +951,8 @@ int util_env_insert(char ***penv, size_t *penv_len, const char *key, size_t key_
     env = *penv;
     env_len = *penv_len;
 
-    if (env_len > (SIZE_MAX / sizeof(char *)) - 1) {
-        ERROR("Failed to realloc memory for envionment variables");
+    if (env_len > (MAX_MEMORY_SIZE / sizeof(char *)) - 1) {
+        ERROR("Too large envionment variables");
         return -1;
     }
 
@@ -1108,7 +1112,7 @@ static int set_echo_back(bool echo_back)
     return 0;
 }
 
-int util_input_notty(char *buf, size_t maxlen)
+static int util_input_notty(char *buf, size_t maxlen)
 {
     size_t i = 0;
     int ret = 0;
@@ -1424,9 +1428,9 @@ int util_read_pid_ppid_info(uint32_t pid, pid_ppid_info_t *pid_info)
     proc_t *proc = NULL;
     proc_t *p_proc = NULL;
 
-    if (pid == 0) {
-        ret = -1;
-        goto out;
+    if (pid == 0 || pid_info == NULL) {
+        ERROR("Invalid arguments");
+        return -1;
     }
 
     proc = util_get_process_proc_info((pid_t)pid);
@@ -1506,8 +1510,8 @@ defs_map_string_object *dup_map_string_empty_object(defs_map_string_object *src)
         return NULL;
     }
 
-    dst->keys = util_common_calloc_s(src->len * sizeof(char *));
-    dst->values = util_common_calloc_s(src->len * sizeof(defs_map_string_object_element *));
+    dst->keys = util_smart_calloc_s(sizeof(char *), src->len);
+    dst->values = util_smart_calloc_s(sizeof(defs_map_string_object_element *), src->len);
     if (dst->keys == NULL || dst->values == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -1538,12 +1542,16 @@ int convert_v2_runtime(const char *runtime, char *binary)
     size_t parts_len = 0;
     char buf[PATH_MAX]  = {0};
     int ret = 0;
+    int nret;
+
+    if (binary == NULL) {
+        return -1;
+    }
 
     parts = util_string_split_multi(runtime, '.');
     if (parts == NULL) {
         ERROR("split failed: %s", runtime);
-        ret = -1;
-        goto out;
+        return -1;
     }
 
     parts_len = util_array_len((const char **)parts);
@@ -1553,15 +1561,13 @@ int convert_v2_runtime(const char *runtime, char *binary)
         goto out;
     }
 
-    if (binary != NULL) {
-        int nret = snprintf(buf, sizeof(buf), "%s-%s-%s-%s", "containerd", "shim", parts[2], parts[3]);
-        if (nret < 0 || (size_t)nret >= sizeof(buf)) {
-            ERROR("Failed to snprintf string");
-            ret = -1;
-            goto out;
-        }
-        strcpy(binary, buf);
+    nret = snprintf(buf, sizeof(buf), "%s-%s-%s-%s", "containerd", "shim", parts[2], parts[3]);
+    if (nret < 0 || (size_t)nret >= sizeof(buf)) {
+        ERROR("Failed to snprintf string");
+        ret = -1;
+        goto out;
     }
+    (void)strcpy(binary, buf);
 
 out:
     util_free_array(parts);
-- 
2.25.1

