Reduce duplicated call to get length of key string 34/221134/3
authorJihoon Kim <jihoon48.kim@samsung.com>
Fri, 27 Dec 2019 09:28:37 +0000 (18:28 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Fri, 27 Dec 2019 10:53:19 +0000 (19:53 +0900)
Change-Id: I59917e4954116c9f1d513c943179520747902987
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
ism/extras/wayland_immodule/wayland_imcontext.c

index ae06d98..889a720 100644 (file)
@@ -2105,7 +2105,9 @@ text_input_keysym(void                 *data,
                   uint32_t              modifiers)
 {
     WaylandIMContext *imcontext = (WaylandIMContext *)data;
-    char string[32], key[32], keyname[32];
+    char string[32] = {'\0'};
+    char key[32] = {'\0'};
+    char keyname[32] = {'\0'};
     Ecore_Event_Key *e;
 
     memset(key, 0, sizeof(key));
@@ -2121,18 +2123,34 @@ text_input_keysym(void                 *data,
 
     SECURE_LOGD("key event (key: %s)", keyname);
 
-    e = calloc(1, sizeof(Ecore_Event_Key) + strlen(key) + strlen(keyname) +
-            strlen(string) + 3);
+    unsigned int key_len = strlen(key);
+    unsigned int key_name_len = strlen(keyname);
+    unsigned int key_string_len = strlen(string);
+
+    if (key_len > sizeof(key)-1)
+        key_len = sizeof(key)-1;
+
+    if (key_name_len > sizeof(keyname)-1)
+        key_name_len = sizeof(keyname)-1;
+
+    if (key_string_len > sizeof(string)-1)
+        key_string_len = sizeof(string)-1;
+
+    e = calloc(1, sizeof(Ecore_Event_Key) + key_len + key_name_len +
+            key_string_len + 3);
     if (!e) return;
 
     e->keyname = (char *)(e + 1);
-    e->key = e->keyname + strlen(keyname) + 1;
-    e->string = e->key + strlen(key) + 1;
+    e->key = e->keyname + key_name_len + 1;
+    e->string = e->key + key_len + 1;
     e->compose = e->string;
 
-    strncpy((char *)e->keyname, keyname, strlen(keyname));
-    strncpy((char *)e->key, key, strlen(key));
-    strncpy((char *)e->string, string, strlen(string));
+    memcpy((void *)e->keyname, keyname, key_name_len);
+    *((char *)e->keyname + key_name_len + 1) = '\0';
+    memcpy((void *)e->key, key, key_len);
+    *((char *)e->key + key_len + 1) = '\0';
+    memcpy((void *)e->string, string, key_string_len);
+    *((char *)e->string + key_string_len + 1) = '\0';
 
     e->window = (Ecore_Window)ecore_wl2_window_id_get(imcontext->window);
     e->event_window = (Ecore_Window)ecore_wl2_window_id_get(imcontext->window);