File libfm-1.2.3-Fix-SF902.patch of Package libfm
From ed02b1476ef477b9782a43b7aa2998e644ad6195 Mon Sep 17 00:00:00 2001
From: Andriy Grytsenko <andrej@rep.kiev.ua>
Date: Thu, 23 Oct 2014 19:10:42 +0300
Subject: [PATCH] [SF#902]Handle NULL returned by
fm_mime_type_from_native_file() correctly.
---
NEWS | 2 ++
src/base/fm-file-info.c | 5 +++++
src/base/fm-mime-type.c | 3 ++-
src/base/fm-templates.c | 4 ++++
4 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/NEWS b/NEWS
index 6ad99f3..58ee98a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,5 @@
+* Fixed crash in templates on file that was deleted instantly after creation.
+
Changes on 1.2.3 since 1.2.2:
* Changed licence for libfm-extra and libfm components from GPL-2 to
diff --git a/src/base/fm-file-info.c b/src/base/fm-file-info.c
index 9072a14..fc3ca28 100644
--- a/src/base/fm-file-info.c
+++ b/src/base/fm-file-info.c
@@ -251,7 +251,12 @@ gboolean _fm_file_info_set_from_native_file(FmFileInfo* fi, const char* path,
fi->mime_type = fm_mime_type_from_file_name(fm_path_get_basename(fi->path));
}
else
+ {
fi->mime_type = fm_mime_type_from_native_file(path, fm_path_get_basename(fi->path), &st);
+ if (G_UNLIKELY(fi->mime_type == NULL))
+ /* file might be deleted while we test it but we assume mime_type is not NULL */
+ fi->mime_type = fm_mime_type_from_name("application/octet-stream");
+ }
if (get_fast) /* do rough estimation */
fi->accessible = ((st.st_mode & S_IRUSR) == S_IRUSR);
diff --git a/src/base/fm-mime-type.c b/src/base/fm-mime-type.c
index e5ff140..1b28e48 100644
--- a/src/base/fm-mime-type.c
+++ b/src/base/fm-mime-type.c
@@ -127,7 +127,8 @@ FmMimeType* fm_mime_type_from_file_name(const char* ufile_name)
* @base_name: file basename
* @pstat: (allow-none): file atrributes
*
- * Finds #FmMimeType descriptor for provided data.
+ * Finds #FmMimeType descriptor for provided data. If file does not exist
+ * then returns %NULL.
*
* Before 1.0.0 this API had name fm_mime_type_get_for_native_file.
*
diff --git a/src/base/fm-templates.c b/src/base/fm-templates.c
index ea3526b..062b606 100644
--- a/src/base/fm-templates.c
+++ b/src/base/fm-templates.c
@@ -152,6 +152,10 @@ static FmMimeType *_fm_template_guess_mime_type(FmPath *path, FmMimeType *mime_t
gchar *filename, *type, *url;
GKeyFile *kf;
+ /* SF bug #902: if file was deleted instantly we get NULL here */
+ if (mime_type == NULL)
+ return NULL;
+
/* if file is desktop entry then find the real template file path */
if(mime_type != _fm_mime_type_get_application_x_desktop())
{
--
2.1.4