e_config: fixed resource leak and out-of-bounds read 20/49320/2
authorMinJeong Kim <minjjj.kim@samsung.com>
Mon, 12 Oct 2015 12:51:34 +0000 (21:51 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Tue, 13 Oct 2015 00:28:41 +0000 (17:28 -0700)
Change-Id: Ia91b78110896b4c6b730fca81c8df7dfccacf9e3

src/bin/e_config.c

index c0506cbe32469dcabcd58f5074f8a45ebd2e5013..5ad041c267129bdcd9f133e9b3d433e41ae3ea84 100644 (file)
@@ -1144,11 +1144,23 @@ e_config_load(void)
                  EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl)
                    {
                       if (cl->name == e_config->xkb.cur_layout)
-                        e_config->xkb.current_layout = e_config_xkb_layout_dup(cl);
+                        {
+                           if (e_config->xkb.current_layout)
+                             e_config_xkb_layout_free(e_config->xkb.current_layout);
+                           e_config->xkb.current_layout = e_config_xkb_layout_dup(cl);
+                        }
                       if (cl->name == e_config->xkb.selected_layout)
-                        e_config->xkb.sel_layout = e_config_xkb_layout_dup(cl);
+                        {
+                           if (e_config->xkb.sel_layout)
+                             e_config_xkb_layout_free(e_config->xkb.sel_layout);
+                           e_config->xkb.sel_layout = e_config_xkb_layout_dup(cl);
+                        }
                       if (cl->name == e_config->xkb.desklock_layout)
-                        e_config->xkb.lock_layout = e_config_xkb_layout_dup(cl);
+                        {
+                           if (e_config->xkb.lock_layout)
+                             e_config_xkb_layout_free(e_config->xkb.lock_layout);
+                           e_config->xkb.lock_layout = e_config_xkb_layout_dup(cl);
+                        }
                       if (((!!e_config->xkb.current_layout) == (!!e_config->xkb.cur_layout)) &&
                           ((!!e_config->xkb.sel_layout) == (!!e_config->xkb.selected_layout)) &&
                           ((!!e_config->xkb.lock_layout) == (!!e_config->xkb.desklock_layout)))
@@ -1634,7 +1646,7 @@ e_config_profile_list(void)
           }
      }
    len = e_prefix_data_concat_static(buf, "data/config");
-   if (len >= sizeof(buf))
+   if (len + 1 >= sizeof(buf))
      return NULL;
 
    files = ecore_file_ls(buf);