Add exception handling 51/155851/2
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 30 Nov 2016 22:41:12 +0000 (07:41 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Mon, 16 Oct 2017 10:06:32 +0000 (19:06 +0900)
Change-Id: I3770d15860345ce232d54b0e013184e8086ed079
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
xdgmime/src/xdgmime.c
xdgmime/src/xdgmimecache.c
xdgmime/src/xdgmimemagic.c

index 3ec0969..7f1dc9c 100644 (file)
@@ -146,6 +146,9 @@ xdg_mime_init_from_directory (const char *directory)
   assert (directory != NULL);
 
   file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1);
+  if (file_name == NULL)
+      return TRUE;
+
   strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache");
   if (stat (file_name, &st) == 0)
     {
@@ -155,17 +158,24 @@ xdg_mime_init_from_directory (const char *directory)
        {
          xdg_dir_time_list_add (file_name, st.st_mtime);
 
-         _caches = realloc (_caches, sizeof (XdgMimeCache *) * (n_caches + 2));
-         _caches[n_caches] = cache;
-          _caches[n_caches + 1] = NULL;
-         n_caches++;
+         XdgMimeCache **tmp_caches = realloc (_caches, sizeof (XdgMimeCache *) * (n_caches + 2));
+          if (tmp_caches != NULL)
+            {
+              _caches = tmp_caches;
+              _caches[n_caches] = cache;
+              _caches[n_caches + 1] = NULL;
+              n_caches++;
 
-         return FALSE;
-       }
+              return FALSE;
+            }
+        }
     }
   free (file_name);
 
   file_name = malloc (strlen (directory) + strlen ("/mime/globs2") + 1);
+  if (file_name == NULL)
+    return TRUE;
+
   strcpy (file_name, directory); strcat (file_name, "/mime/globs2");
   if (stat (file_name, &st) == 0)
     {
@@ -176,6 +186,9 @@ xdg_mime_init_from_directory (const char *directory)
     {
       free (file_name);
       file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1);
+      if (file_name == NULL)
+        return TRUE;
+
       strcpy (file_name, directory); strcat (file_name, "/mime/globs");
       if (stat (file_name, &st) == 0)
         {
@@ -189,6 +202,9 @@ xdg_mime_init_from_directory (const char *directory)
     }
 
   file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1);
+  if (file_name == NULL)
+    return TRUE;
+
   strcpy (file_name, directory); strcat (file_name, "/mime/magic");
   if (stat (file_name, &st) == 0)
     {
@@ -201,21 +217,33 @@ xdg_mime_init_from_directory (const char *directory)
     }
 
   file_name = malloc (strlen (directory) + strlen ("/mime/aliases") + 1);
+  if (file_name == NULL)
+    return TRUE;
+
   strcpy (file_name, directory); strcat (file_name, "/mime/aliases");
   _xdg_mime_alias_read_from_file (alias_list, file_name);
   free (file_name);
 
   file_name = malloc (strlen (directory) + strlen ("/mime/subclasses") + 1);
+  if (file_name == NULL)
+    return TRUE;
+
   strcpy (file_name, directory); strcat (file_name, "/mime/subclasses");
   _xdg_mime_parent_read_from_file (parent_list, file_name);
   free (file_name);
 
   file_name = malloc (strlen (directory) + strlen ("/mime/icons") + 1);
+  if (file_name == NULL)
+    return TRUE;
+
   strcpy (file_name, directory); strcat (file_name, "/mime/icons");
   _xdg_mime_icon_read_from_file (icon_list, file_name);
   free (file_name);
 
   file_name = malloc (strlen (directory) + strlen ("/mime/generic-icons") + 1);
+  if (file_name == NULL)
+    return TRUE;
+
   strcpy (file_name, directory); strcat (file_name, "/mime/generic-icons");
   _xdg_mime_icon_read_from_file (generic_icon_list, file_name);
   free (file_name);
index 1e99b3e..ddcb90c 100644 (file)
@@ -124,7 +124,7 @@ _xdg_mime_cache_new_from_file (const char *file_name)
 
   if (fd < 0)
     return NULL;
-  
+
   if (fstat (fd, &st) < 0 || st.st_size < 4)
     goto done;
 
@@ -143,8 +143,15 @@ _xdg_mime_cache_new_from_file (const char *file_name)
 
       goto done;
     }
-  
+
   cache = (XdgMimeCache *) malloc (sizeof (XdgMimeCache));
+  if (cache == NULL)
+    {
+      munmap (buffer, st.st_size);
+
+      goto done;
+    }
+
   cache->minor = minor;
   cache->ref_count = 1;
   cache->buffer = buffer;
index a2320f5..fbc03af 100644 (file)
@@ -169,6 +169,9 @@ _xdg_mime_magic_read_to_newline (FILE *magic_file,
   len = 128;
   pos = 0;
   retval = malloc (len);
+  if (retval == NULL)
+    return NULL;
+
   *end_of_file = FALSE;
 
   while (TRUE)
@@ -185,7 +188,13 @@ _xdg_mime_magic_read_to_newline (FILE *magic_file,
       if (pos % 128 == 127)
        {
          len = len + 128;
-         retval = realloc (retval, len);
+         unsigned char *tmp = realloc (retval, len);
+          if (tmp == NULL)
+           {
+              free(retval);
+              return NULL;
+            }
+         retval = tmp;
        }
     }