From ccb56f47b661aaac5d95a993692858641a05e0bc Mon Sep 17 00:00:00 2001 From: Juyeon Lee Date: Thu, 2 Jan 2020 14:10:36 +0900 Subject: [PATCH] toolchain upgrade: fix warn for string truncation or overflow toolchain upgrade(GCC-9) in Tizen 6.0 Change-Id: Ia59984091cbdcac61b2f68dac7ea0e04454db6c8 --- src/bin/e_comp_wl_input.c | 4 +-- src/bin/e_comp_wl_rsm.c | 6 ++-- src/bin/e_info_client.c | 58 +++++++++++++++++++++------------------ src/bin/e_main.c | 4 +-- src/bin/e_module.c | 2 +- 5 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c index f3c494875e..86fc79cada 100644 --- a/src/bin/e_comp_wl_input.c +++ b/src/bin/e_comp_wl_input.c @@ -419,10 +419,10 @@ _e_comp_wl_input_keymap_fd_get(off_t size) path = e_util_env_get("XDG_RUNTIME_DIR"); if (!path) return -1; - len = strlen(path); + len = strlen(path) + 19; if (len < blen) { - strncpy(tmp, path, len + 1); + strncpy(tmp, path, PATH_MAX - 20); strncat(tmp, "/e-wl-keymap-XXXXXX", 19); E_FREE(path); } diff --git a/src/bin/e_comp_wl_rsm.c b/src/bin/e_comp_wl_rsm.c index 6cc307b1f0..e62301c8d0 100644 --- a/src/bin/e_comp_wl_rsm.c +++ b/src/bin/e_comp_wl_rsm.c @@ -1147,7 +1147,7 @@ _remote_source_default_path_get(E_Client *ec, Eina_Stringshare** dir, Eina_Strin { char name[1024]; char dest_dir[1024]; - char dest[2048]; + char dest[PATH_MAX]; char *run_dir; int id = 0; @@ -2808,10 +2808,10 @@ _e_comp_wl_remote_surface_dummy_fd_get(void) path = e_util_env_get("XDG_RUNTIME_DIR"); if (!path) return -1; - len = strlen(path); + len = strlen(path) + 34; if (len < blen) { - strncpy(buf, path, len + 1); + strncpy(buf, path, PATH_MAX - 35); strncat(buf, "/enlightenment_rsm_dummy_fdXXXXXX", 34); E_FREE(path); } diff --git a/src/bin/e_info_client.c b/src/bin/e_info_client.c index 680370fa99..9f9e4bdfff 100644 --- a/src/bin/e_info_client.c +++ b/src/bin/e_info_client.c @@ -881,7 +881,7 @@ finish: static void _e_info_client_proc_protocol_trace(int argc, char **argv) { - char fd_name[PATH_MAX]; + char fd_name[PATH_MAX + PATH_MAX]; int pid; char cwd[PATH_MAX]; @@ -898,11 +898,11 @@ _e_info_client_proc_protocol_trace(int argc, char **argv) snprintf(cwd, sizeof(cwd), "/tmp"); if (!strncmp(argv[2], "console", 7)) - snprintf(fd_name, PATH_MAX, "/proc/%d/fd/1", pid); + snprintf(fd_name, sizeof(fd_name), "/proc/%d/fd/1", pid); else if (!strncmp(argv[2], "elog", 4)) - snprintf(fd_name, PATH_MAX, "elog"); + snprintf(fd_name, sizeof(fd_name), "elog"); else if (!strncmp(argv[2], "disable", 7)) - snprintf(fd_name, PATH_MAX, "disable"); + snprintf(fd_name, sizeof(fd_name), "disable"); else { if (argv[2][0] == '/') @@ -910,9 +910,9 @@ _e_info_client_proc_protocol_trace(int argc, char **argv) else { if (strlen(cwd) > 0) - snprintf(fd_name, PATH_MAX, "%s/%s", cwd, argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s/%s", cwd, argv[2]); else - snprintf(fd_name, PATH_MAX, "%s", argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s", argv[2]); } } @@ -1417,7 +1417,7 @@ _e_info_client_proc_module_info(int argc, char **argv) static void _e_info_client_proc_keygrab_status(int argc, char **argv) { - char fd_name[PATH_MAX]; + char fd_name[PATH_MAX + PATH_MAX]; int pid; char cwd[PATH_MAX]; @@ -1434,17 +1434,17 @@ _e_info_client_proc_keygrab_status(int argc, char **argv) snprintf(cwd, sizeof(cwd), "/tmp"); if (!strncmp(argv[2], "console", sizeof("console"))) - snprintf(fd_name, PATH_MAX, "/proc/%d/fd/1", pid); + snprintf(fd_name, sizeof(fd_name), "/proc/%d/fd/1", pid); else { if (argv[2][0] == '/') - snprintf(fd_name, PATH_MAX, "%s", argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s", argv[2]); else { if (strlen(cwd) > 0) - snprintf(fd_name, PATH_MAX, "%s/%s", cwd, argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s/%s", cwd, argv[2]); else - snprintf(fd_name, PATH_MAX, "%s", argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s", argv[2]); } } @@ -1455,7 +1455,7 @@ _e_info_client_proc_keygrab_status(int argc, char **argv) static char * _directory_make(char *type, char *path) { - char dir[PATH_MAX], curdir[PATH_MAX], stamp[PATH_MAX]; + char dir[2048], curdir[1024], stamp[256]; time_t timer; struct tm *t, *buf; char *fullpath; @@ -1483,10 +1483,10 @@ _directory_make(char *type, char *path) } if (path && path[0] == '/') - snprintf(dir, PATH_MAX, "%s", path); + snprintf(dir, sizeof(dir), "%s", path); else { - char *temp = getcwd(curdir, PATH_MAX); + char *temp = getcwd(curdir, 1024); if (!temp) { free(buf); @@ -1495,13 +1495,19 @@ _directory_make(char *type, char *path) } if (path) { - if (strlen(curdir) == 1 && curdir[0] == '/') - snprintf(dir, PATH_MAX, "/%s", path); + int len, cur_len; + cur_len = strlen(curdir); + len = sizeof(dir) - strlen(path) - cur_len - 2; + + if (cur_len == 1 && curdir[0] == '/') + snprintf(dir, sizeof(dir), "/%s", path); + else if (len > 0) + snprintf(dir, sizeof(dir), "%s/%s", curdir, path); else - snprintf(dir, PATH_MAX, "%s/%s", curdir, path); + return NULL; } else - snprintf(dir, PATH_MAX, "%s", curdir); + snprintf(dir, sizeof(dir), "%s", curdir); } if (!(dp = opendir (dir))) @@ -1515,7 +1521,7 @@ _directory_make(char *type, char *path) closedir (dp); /* make the folder for the result of xwd files */ - snprintf(stamp, PATH_MAX, "%04d%02d%02d.%02d%02d%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); + snprintf(stamp, sizeof(stamp), "%04d%02d%02d.%02d%02d%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); if (strlen(dir) == 1 && dir[0] == '/') snprintf(fullpath, PATH_MAX, "/%s-%s", type, stamp); @@ -1727,7 +1733,7 @@ _e_info_client_proc_eina_log_levels(int argc, char **argv) static void _e_info_client_proc_eina_log_path(int argc, char **argv) { - char fd_name[PATH_MAX]; + char fd_name[PATH_MAX + PATH_MAX]; int pid; char cwd[PATH_MAX]; @@ -1741,17 +1747,17 @@ _e_info_client_proc_eina_log_path(int argc, char **argv) snprintf(cwd, sizeof(cwd), "/tmp"); if (!strncmp(argv[2], "console", 7)) - snprintf(fd_name, PATH_MAX, "/proc/%d/fd/1", pid); + snprintf(fd_name, sizeof(fd_name), "/proc/%d/fd/1", pid); else { if (argv[2][0] == '/') - snprintf(fd_name, PATH_MAX, "%s", argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s", argv[2]); else { if (strlen(cwd) > 0) - snprintf(fd_name, PATH_MAX, "%s/%s", cwd, argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s/%s", cwd, argv[2]); else - snprintf(fd_name, PATH_MAX, "%s", argv[2]); + snprintf(fd_name, sizeof(fd_name), "%s", argv[2]); } } @@ -2460,7 +2466,7 @@ _e_info_client_proc_transform_set(int argc, char **argv) static char * _buffer_shot_directory_check(char *path) { - char dir[PATH_MAX], curdir[PATH_MAX]; + char dir[PATH_MAX], curdir[1024]; char *fullpath; DIR *dp; @@ -2475,7 +2481,7 @@ _buffer_shot_directory_check(char *path) snprintf(dir, PATH_MAX, "%s", path); else { - char *temp = getcwd(curdir, PATH_MAX); + char *temp = getcwd(curdir, 1024); if (!temp) { free(fullpath); diff --git a/src/bin/e_main.c b/src/bin/e_main.c index a605198a6e..a1357122ed 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -148,7 +148,7 @@ _xdg_data_dirs_augment(void) { char *s; const char *p = e_prefix_get(); - char newpath[4096], buf[4096]; + char newpath[PATH_MAX], buf[PATH_MAX + PATH_MAX + 200]; if (!p) return; @@ -850,7 +850,7 @@ _e_main_shutdown(int errcode) dir = e_util_env_get("XDG_RUNTIME_DIR"); if (dir) { - char buf_env[PATH_MAX]; + char buf_env[PATH_MAX - 12]; snprintf(buf_env, sizeof(buf_env), "%s", dir); snprintf(buf, sizeof(buf), "%s/.e-deleteme", buf_env); if (ecore_file_exists(buf)) ecore_file_recursive_rm(buf_env); diff --git a/src/bin/e_module.c b/src/bin/e_module.c index 3456550c8f..45436674cb 100644 --- a/src/bin/e_module.c +++ b/src/bin/e_module.c @@ -320,7 +320,7 @@ e_module_new(const char *name) { E_Module *m; char buf[PATH_MAX]; - char body[4096], title[1024]; + char body[8192], title[1024]; const char *modpath = NULL; char *s; Eina_List *l, *ll; -- 2.34.1