]> git.0d.be Git - empathy.git/commitdiff
Refuse sending empty or special files (directories, char/block devices, etc.)
authorFrédéric Péters <fpeters@0d.be>
Wed, 17 Jun 2009 07:57:02 +0000 (09:57 +0200)
committerFrédéric Péters <fpeters@0d.be>
Wed, 17 Jun 2009 08:15:52 +0000 (10:15 +0200)
(GNOME bug 563678)

libempathy/empathy-ft-handler.c
libempathy/empathy-tp-file.h

index ba81fd4c77c173f4617ec75d95e4c5d72bcb673a..d24467b24e329c87be2143d4e9ef1d612b698493 100644 (file)
@@ -1149,9 +1149,25 @@ ft_handler_gfile_ready_cb (GObject *source,
   if (error != NULL)
     goto out;
 
+  if (g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR)
+    {
+      error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
+          EMPATHY_FT_ERROR_INVALID_SOURCE_FILE,
+          _("The selected file is not a regular file"));
+      goto out;
+    }
+
+  priv->total_bytes = g_file_info_get_size (info);
+  if (priv->total_bytes == 0)
+    {
+      error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
+          EMPATHY_FT_ERROR_EMPTY_SOURCE_FILE,
+          _("The selected file is empty"));
+      goto out;
+    }
+
   priv->content_type = g_strdup (g_file_info_get_content_type (info));
   priv->filename = g_strdup (g_file_info_get_display_name (info));
-  priv->total_bytes = g_file_info_get_size (info);
   g_file_info_get_modification_time (info, &mtime);
   priv->mtime = mtime.tv_sec;
   priv->transferred_bytes = 0;
@@ -1303,6 +1319,7 @@ empathy_ft_handler_new_outgoing (EmpathyContact *contact,
       G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
       G_FILE_ATTRIBUTE_STANDARD_SIZE ","
       G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
+      G_FILE_ATTRIBUTE_STANDARD_TYPE ","
       G_FILE_ATTRIBUTE_TIME_MODIFIED,
       G_FILE_QUERY_INFO_NONE, G_PRIORITY_DEFAULT,
       NULL, (GAsyncReadyCallback) ft_handler_gfile_ready_cb, data);
index 0d7d8efc00d8bd2f76594e123e3835e11f53223a..b40b8c364956de02fc75edf6eb6cac90c16256a6 100644 (file)
@@ -50,7 +50,9 @@ typedef enum {
        EMPATHY_FT_ERROR_HASH_MISMATCH,
        EMPATHY_FT_ERROR_TP_ERROR,
        EMPATHY_FT_ERROR_SOCKET,
-       EMPATHY_FT_ERROR_NOT_SUPPORTED
+       EMPATHY_FT_ERROR_NOT_SUPPORTED,
+       EMPATHY_FT_ERROR_INVALID_SOURCE_FILE,
+       EMPATHY_FT_ERROR_EMPTY_SOURCE_FILE
 } EmpathyFTErrorEnum;
 
 typedef struct _EmpathyTpFile EmpathyTpFile;