Marco Trevisan (Treviño) has proposed merging 
~3v1n0/ubuntu/+source/nautilus:ubuntu/bionic-fix-file-remote-type-search-crash 
into ~ubuntu-desktop/ubuntu/+source/nautilus:ubuntu/bionic.

Requested reviews:
  Ubuntu Desktop (ubuntu-desktop)
Related bugs:
  Bug #1795028 in nautilus (Ubuntu): "Nautilus crashes during search in 
is_recursive_search (search-engine)"
  https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1795028

For more details, see:
https://code.launchpad.net/~3v1n0/ubuntu/+source/nautilus/+git/nautilus/+merge/356136
-- 
Your team Ubuntu Desktop is requested to review the proposed merge of 
~3v1n0/ubuntu/+source/nautilus:ubuntu/bionic-fix-file-remote-type-search-crash 
into ~ubuntu-desktop/ubuntu/+source/nautilus:ubuntu/bionic.
diff --git a/debian/changelog b/debian/changelog
index 62b7833..1d1673f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+nautilus (1:3.26.4-0~ubuntu18.04.2) bionic; urgency=medium
+
+  * d/p/search-engine-Query-file-system-to-determine-remoteness.patch:
+    - Fix remote filesystem check on file during search (LP: #1795028)
+
+ -- Marco Trevisan (Treviño) <ma...@ubuntu.com>  Thu, 04 Oct 2018 16:15:08 +0200
+
 nautilus (1:3.26.4-0~ubuntu18.04.1) bionic; urgency=medium
 
   * New upstream release: 3.26.4 (LP: #1782681, LP: #1765776)
diff --git a/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch b/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
index f80997f..20e597c 100644
--- a/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
+++ b/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
@@ -512,7 +512,7 @@ index 0000000..bcd73b9
 +
 +#endif /* __NAUTILUS_SEARCH_ENGINE_RECENT_H__ */
 diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
-index 3a0c9d4..793b831 100644
+index 28863f7..a4c6007 100644
 --- a/src/nautilus-search-engine.c
 +++ b/src/nautilus-search-engine.c
 @@ -30,11 +30,13 @@
diff --git a/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch b/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
index e6185da..ad248da 100644
--- a/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
+++ b/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
@@ -49,7 +49,7 @@ index 19316e8..9bb5460 100644
  
      /* Now send out the changed and added signals for existing file objects. */
 diff --git a/src/nautilus-file.c b/src/nautilus-file.c
-index 63413a6..9416214 100644
+index 28b5a13..7886d1f 100644
 --- a/src/nautilus-file.c
 +++ b/src/nautilus-file.c
 @@ -34,6 +34,7 @@
diff --git a/debian/patches/0018-search-engine-add-locate-based-search-engine.patch b/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
index 91a7ec0..158b448 100644
--- a/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
+++ b/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
@@ -678,7 +678,7 @@ index 0000000..ac5e3fc
 +
 +#endif /* __NAUTILUS_SEARCH_ENGINE_LOCATE_H__ */
 diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
-index 793b831..902d483 100644
+index a4c6007..475a432 100644
 --- a/src/nautilus-search-engine.c
 +++ b/src/nautilus-search-engine.c
 @@ -29,6 +29,7 @@
diff --git a/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch b/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch
index fddae3e..3c89693 100644
--- a/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch
+++ b/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch
@@ -198,7 +198,7 @@ index b567611..b165d63 100644
 +
  #endif /* NAUTILUS_FILE_UTILITIES_H */
 diff --git a/src/nautilus-file.c b/src/nautilus-file.c
-index 3f6a69f..63413a6 100644
+index 22ea199..e30d791 100644
 --- a/src/nautilus-file.c
 +++ b/src/nautilus-file.c
 @@ -4975,6 +4975,29 @@ nautilus_file_get_filesystem_type (NautilusFile *file)
diff --git a/debian/patches/search-engine-Query-file-system-to-determine-remoteness.patch b/debian/patches/search-engine-Query-file-system-to-determine-remoteness.patch
new file mode 100644
index 0000000..1b7f874
--- /dev/null
+++ b/debian/patches/search-engine-Query-file-system-to-determine-remoteness.patch
@@ -0,0 +1,127 @@
+From: Ernestas Kulik <ernest...@gnome.org>
+Date: Fri, 14 Sep 2018 12:52:11 +0200
+Subject: search-engine: Query file system to determine remoteness
+
+Querying the file cache in is_recursive_search() does not guarantee that
+the file system field will be populated with a value, and somehow
+results in data races, in turn resulting in random crashes/file list
+corruption.
+
+Hopefully fixes https://gitlab.gnome.org/GNOME/nautilus/issues/640,
+closes https://gitlab.gnome.org/GNOME/nautilus/issues/632 and resolves
+https://gitlab.gnome.org/GNOME/nautilus/issues/602
+
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1795028
+Applied-Upstream: yes, 3.30.1, https://gitlab.gnome.org/GNOME/nautilus/commit/62ba6d83d
+---
+ src/nautilus-file-utilities.c | 18 ++++++++++++++++++
+ src/nautilus-file-utilities.h |  2 ++
+ src/nautilus-file.c           | 14 +-------------
+ src/nautilus-search-engine.c  | 18 +++++++++++++++---
+ 4 files changed, 36 insertions(+), 16 deletions(-)
+
+diff --git a/src/nautilus-file-utilities.c b/src/nautilus-file-utilities.c
+index f8d8476..3e363a4 100644
+--- a/src/nautilus-file-utilities.c
++++ b/src/nautilus-file-utilities.c
+@@ -1565,3 +1565,21 @@ location_settings_search_get_recursive_for_location (GFile *location)
+ 
+     return recursive;
+ }
++
++gboolean
++nautilus_file_system_is_remote (const char *file_system)
++{
++    static const gchar * const remote_types[] =
++    {
++        "afp",
++        "google-drive",
++        "sftp",
++        "webdav",
++        "ftp",
++        "nfs",
++        "cifs",
++        NULL
++    };
++
++    return file_system != NULL && g_strv_contains (remote_types, file_system);
++}
+diff --git a/src/nautilus-file-utilities.h b/src/nautilus-file-utilities.h
+index b165d63..37f7f49 100644
+--- a/src/nautilus-file-utilities.h
++++ b/src/nautilus-file-utilities.h
+@@ -133,4 +133,6 @@ gchar * nautilus_uri_to_native_uri (const gchar *uri);
+ NautilusQueryRecursive location_settings_search_get_recursive (void);
+ NautilusQueryRecursive location_settings_search_get_recursive_for_location (GFile *location);
+ 
++gboolean nautilus_file_system_is_remote (const char *file_system);
++
+ #endif /* NAUTILUS_FILE_UTILITIES_H */
+diff --git a/src/nautilus-file.c b/src/nautilus-file.c
+index e30d791..28b5a13 100644
+--- a/src/nautilus-file.c
++++ b/src/nautilus-file.c
+@@ -8371,18 +8371,6 @@ nautilus_file_is_in_recent (NautilusFile *file)
+     return nautilus_directory_is_in_recent (file->details->directory);
+ }
+ 
+-static const gchar * const remote_types[] =
+-{
+-    "afp",
+-    "google-drive",
+-    "sftp",
+-    "webdav",
+-    "ftp",
+-    "nfs",
+-    "cifs",
+-    NULL
+-};
+-
+ /**
+  * nautilus_file_is_remote
+  *
+@@ -8406,7 +8394,7 @@ nautilus_file_is_remote (NautilusFile *file)
+ 
+     filesystem_type = nautilus_file_get_filesystem_type (file);
+ 
+-    return filesystem_type != NULL && g_strv_contains (remote_types, filesystem_type);
++    return nautilus_file_system_is_remote (filesystem_type);
+ }
+ 
+ /**
+diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
+index 3a0c9d4..28863f7 100644
+--- a/src/nautilus-search-engine.c
++++ b/src/nautilus-search-engine.c
+@@ -23,7 +23,7 @@
+ #include "nautilus-search-engine.h"
+ #include "nautilus-search-engine-private.h"
+ 
+-#include "nautilus-file.h"
++#include "nautilus-file-utilities.h"
+ #include "nautilus-search-engine-model.h"
+ #include "nautilus-search-provider.h"
+ #include <glib/gi18n.h>
+@@ -437,8 +437,20 @@ is_recursive_search (NautilusSearchEngineType  engine_type,
+ 
+         case NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY:
+         {
+-            g_autoptr (NautilusFile) file = nautilus_file_get (location);
+-            return !nautilus_file_is_remote (file);
++            g_autoptr (GFileInfo) file_system_info = NULL;
++
++            file_system_info = g_file_query_filesystem_info (location,
++                                                             G_FILE_ATTRIBUTE_FILESYSTEM_TYPE,
++                                                             NULL, NULL);
++            if (file_system_info != NULL)
++            {
++                const char *file_system;
++
++                file_system = g_file_info_get_attribute_string (file_system_info,
++                                                                G_FILE_ATTRIBUTE_FILESYSTEM_TYPE);
++
++                return !nautilus_file_system_is_remote (file_system);
++            }
+         }
+     }
+ 
diff --git a/debian/patches/series b/debian/patches/series
index 41a35d1..2942ff8 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -17,6 +17,7 @@ ubuntu_backspace_behaviour.patch
 #Needs updating
 #16_unity_new_documents.patch
 query-add-recursive-flags-and-use-it-in-search-engines.patch
+search-engine-Query-file-system-to-determine-remoteness.patch
 0015-tracker-search-engine-don-t-start-it-if-not-availabl.patch
 0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
 0017-recent-add-function-to-update-manager-on-file-rename.patch
-- 
ubuntu-desktop mailing list
ubuntu-desktop@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop

Reply via email to