string should be null-terminated when using strncpy 69/63369/1 submit/tizen/20160323.105531
authorGwanglim Lee <gl77.lee@samsung.com>
Wed, 23 Mar 2016 10:42:58 +0000 (19:42 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Wed, 23 Mar 2016 10:42:58 +0000 (19:42 +0900)
Change-Id: I3ed2eab91ed2c8e54da20ce1018ce5c1fb78825f

src/bin/e_comp_wl_input.c
src/bin/e_path.c
src/bin/e_randr2.c
src/modules/wl_drm/e_mod_main.c

index d12c60f..5cdd762 100644 (file)
@@ -370,19 +370,23 @@ _e_comp_wl_input_keymap_fd_get(off_t size)
 
    blen = sizeof(tmp) - 1;
 
-   if (!(path = getenv("XDG_RUNTIME_DIR")))
-     return -1;
+   if (!(path = getenv("XDG_RUNTIME_DIR"))) return -1;
 
    len = strlen(path);
    if (len < blen)
      {
-        strncpy(tmp, path, len);
+        strncpy(tmp, path, len + 1);
         strncat(tmp, "/e-wl-keymap-XXXXXX", 19);
      }
    else
-     return -1;
+     {
+        return -1;
+     }
 
-   if ((fd = mkstemp(tmp)) < 0) return -1;
+   if ((fd = mkstemp(tmp)) < 0)
+     {
+        return -1;
+     }
 
    flags = fcntl(fd, F_GETFD);
    if (flags < 0)
@@ -489,7 +493,7 @@ _e_comp_wl_input_keymap_update(struct xkb_keymap *keymap, const char *keymap_pat
         return;
      }
 
-   strncpy(e_comp_wl->xkb.area, tmp, e_comp_wl->xkb.size - 1);
+   strncpy(e_comp_wl->xkb.area, tmp, e_comp_wl->xkb.size);
    free(tmp);
 
    /* send updated keymap */
index 7f8c8f7..6fef5ce 100644 (file)
@@ -40,7 +40,7 @@ e_path_default_path_append(E_Path *ep, const char *path)
              return;
           }
 
-        strncpy(new_path, home_dir, len1);
+        strncpy(new_path, home_dir, len1 + 1);
         strncat(new_path, path + 1, len1 + len2);
         epd->dir = eina_stringshare_add(new_path);
         free(new_path);
@@ -93,7 +93,7 @@ e_path_user_path_append(E_Path *ep, const char *path)
              return;
           }
 
-        strncpy(new_path, home_dir, len1);
+        strncpy(new_path, home_dir, len1 + 1);
         strncat(new_path, path + 1, len1 + len2);
         epd->dir = eina_stringshare_add(new_path);
         free(new_path);
@@ -136,7 +136,7 @@ e_path_user_path_prepend(E_Path *ep, const char *path)
              return;
           }
 
-        strncpy(new_path, home_dir, len1);
+        strncpy(new_path, home_dir, len1 + 1);
         strncat(new_path, path + 1, len1 + len2);
         epd->dir = eina_stringshare_add(new_path);
         free(new_path);
@@ -174,7 +174,7 @@ e_path_user_path_remove(E_Path *ep, const char *path)
         len2 = strlen(path);
         new_path = malloc(len1 + len2 + 1);
         if (!new_path) return;
-        strncpy(new_path, home_dir, len1);
+        strncpy(new_path, home_dir, len1 + 1);
         strncat(new_path, path + 1, len1 + len2);
         EINA_LIST_FOREACH(*(ep->user_dir_list), l, epd)
           {
index a004eff..4086cb9 100644 (file)
@@ -669,7 +669,7 @@ _screen_fuzzy_fallback_find(E_Config_Randr2 *cfg, const char *id)
    // and fall back to finding just the output name in the rel
    // to identifier, rather than the specific screen id
    name = alloca(strlen(id) + 1);
-   strncpy(name, id, strlen(id));
+   strncpy(name, id, strlen(id) + 1);
    if ((p = strchr(name, '/'))) *p = 0;
 
    s = _screen_id_find(id);
@@ -695,7 +695,7 @@ _config_screen_clone_resolve(E_Config_Randr2 *cfg, const char *id, int *x, int *
    if (!cs) return NULL;
 
    name = alloca(strlen(cs->id) + 1);
-   strncpy(name, cs->id, strlen(cs->id));
+   strncpy(name, cs->id, strlen(cs->id) + 1);
    if ((p = strchr(name, '/'))) *p = 0;
 
    s = _screen_id_find(cs->id);
index ec32784..7180c48 100644 (file)
@@ -421,6 +421,7 @@ _drm_randr_create(void)
              int priority;
              Eina_Bool ok = EINA_FALSE;
              Eina_Bool possible = EINA_FALSE;
+             int len = 0;
 
              s = E_NEW(E_Randr2_Screen, 1);
              if (!s) continue;
@@ -445,9 +446,10 @@ _drm_randr_create(void)
                   free(s);
                   continue;
                }
-             strncpy(s->id, s->info.name, strlen(s->info.name));
+             len = strlen(s->info.name);
+             strncpy(s->id, s->info.name, len + 1);
              strncat(s->id, "/", 1);
-             if (s->info.edid) strcat(s->id, s->info.edid);
+             if (s->info.edid) strncat(s->id, s->info.edid, strlen(s->info.edid));
 
              printf("DRM RRR: Created Screen: %s\n", s->id);