Hello community, here is the log from the commit of package gvfs for openSUSE:Factory checked in at 2018-05-10 15:46:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gvfs (Old) and /work/SRC/openSUSE:Factory/.gvfs.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gvfs" Thu May 10 15:46:23 2018 rev:150 rq:605085 version:1.36.2 Changes: -------- --- /work/SRC/openSUSE:Factory/gvfs/gvfs.changes 2018-04-19 15:22:32.344006119 +0200 +++ /work/SRC/openSUSE:Factory/.gvfs.new/gvfs.changes 2018-05-10 15:46:26.555767080 +0200 @@ -1,0 +2,11 @@ +Mon May 7 09:55:50 UTC 2018 - [email protected] + +- Update to version 1.36.2: + + udisks2: Remove optical disc volumes/mounts if drive + disappears. + + daemon: Prevent deadlock and invalid read when closing + channels. + + metadata: Prevent usage of NULL if GUdevDevice is not found. + + Updated translations. + +------------------------------------------------------------------- Old: ---- gvfs-1.36.1.tar.xz New: ---- gvfs-1.36.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gvfs.spec ++++++ --- /var/tmp/diff_new_pack.HgbdXq/_old 2018-05-10 15:46:27.223742599 +0200 +++ /var/tmp/diff_new_pack.HgbdXq/_new 2018-05-10 15:46:27.223742599 +0200 @@ -19,7 +19,7 @@ %define with_udisks2 1 %define with_cdda 1 Name: gvfs -Version: 1.36.1 +Version: 1.36.2 Release: 0 Summary: Virtual File System functionality for GLib License: LGPL-2.0-or-later AND GPL-3.0-only ++++++ gvfs-1.36.1.tar.xz -> gvfs-1.36.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gvfs-1.36.1/NEWS new/gvfs-1.36.2/NEWS --- old/gvfs-1.36.1/NEWS 2018-04-09 16:42:14.000000000 +0200 +++ new/gvfs-1.36.2/NEWS 2018-05-07 10:11:16.000000000 +0200 @@ -1,3 +1,10 @@ +Major changes in 1.36.2 +======================= +* udisks2: Remove optical disc volumes/mounts if drive disappears +* daemon: Prevent deadlock and invalid read when closing channels +* metadata: Prevent usage of NULL if GUdevDevice is not found +* Translation updates + Major changes in 1.36.1 ======================= * backend: Fix crashes when "Volume is busy" prompt is shown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gvfs-1.36.1/configure.ac new/gvfs-1.36.2/configure.ac --- old/gvfs-1.36.1/configure.ac 2018-04-09 16:42:14.000000000 +0200 +++ new/gvfs-1.36.2/configure.ac 2018-05-07 10:11:16.000000000 +0200 @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) -AC_INIT([gvfs],[1.36.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=gvfs]) +AC_INIT([gvfs],[1.36.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=gvfs]) AM_INIT_AUTOMAKE([1.11.1 no-dist-gzip dist-xz tar-ustar -Wno-portability]) AC_CONFIG_HEADERS(config.h) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gvfs-1.36.1/daemon/gvfsdaemon.c new/gvfs-1.36.2/daemon/gvfsdaemon.c --- old/gvfs-1.36.1/daemon/gvfsdaemon.c 2018-04-09 16:42:15.000000000 +0200 +++ new/gvfs-1.36.2/daemon/gvfsdaemon.c 2018-05-07 10:11:16.000000000 +0200 @@ -1125,13 +1125,29 @@ GVfsBackend *backend) { GList *l; + GVfsChannel *channel_to_close; - g_mutex_lock (&daemon->lock); + do + { + channel_to_close = NULL; - for (l = daemon->job_sources; l != NULL; l = l->next) - if (G_VFS_IS_CHANNEL (l->data) && - g_vfs_channel_get_backend (G_VFS_CHANNEL (l->data)) == backend) - g_vfs_channel_force_close (G_VFS_CHANNEL (l->data)); + g_mutex_lock (&daemon->lock); + for (l = daemon->job_sources; l != NULL; l = l->next) + { + if (G_VFS_IS_CHANNEL (l->data) && + g_vfs_channel_get_backend (G_VFS_CHANNEL (l->data)) == backend) + { + channel_to_close = g_object_ref (G_VFS_CHANNEL (l->data)); + break; + } + } + g_mutex_unlock (&daemon->lock); - g_mutex_unlock (&daemon->lock); + if (channel_to_close) + { + g_vfs_channel_force_close (channel_to_close); + g_object_unref (channel_to_close); + } + } + while (channel_to_close != NULL); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gvfs-1.36.1/meson.build new/gvfs-1.36.2/meson.build --- old/gvfs-1.36.1/meson.build 2018-04-09 16:42:15.000000000 +0200 +++ new/gvfs-1.36.2/meson.build 2018-05-07 10:11:16.000000000 +0200 @@ -1,6 +1,6 @@ project( 'gvfs', 'c', - version: '1.36.1', + version: '1.36.2', license: 'LGPL2+', default_options: [ 'b_lundef=true', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gvfs-1.36.1/metadata/meta-daemon.c new/gvfs-1.36.2/metadata/meta-daemon.c --- old/gvfs-1.36.1/metadata/meta-daemon.c 2018-04-09 16:42:15.000000000 +0200 +++ new/gvfs-1.36.2/metadata/meta-daemon.c 2018-05-07 10:11:16.000000000 +0200 @@ -319,13 +319,15 @@ g_once_init_leave (&gudev_client, g_udev_client_new (NULL)); device = g_udev_client_query_by_device_number (gudev_client, G_UDEV_DEVICE_TYPE_BLOCK, devnum); + if (device != NULL) + { + if (g_udev_device_has_property (device, "ID_FS_UUID_ENC")) + res = g_strconcat ("uuid-", g_udev_device_get_property (device, "ID_FS_UUID_ENC"), NULL); + else if (g_udev_device_has_property (device, "ID_FS_LABEL_ENC")) + res = g_strconcat ("label-", g_udev_device_get_property (device, "ID_FS_LABEL_ENC"), NULL); - if (g_udev_device_has_property (device, "ID_FS_UUID_ENC")) - res = g_strconcat ("uuid-", g_udev_device_get_property (device, "ID_FS_UUID_ENC"), NULL); - else if (g_udev_device_has_property (device, "ID_FS_LABEL_ENC")) - res = g_strconcat ("label-", g_udev_device_get_property (device, "ID_FS_LABEL_ENC"), NULL); - - g_clear_object (&device); + g_clear_object (&device); + } #endif gvfs_metadata_complete_get_tree_from_device (object, invocation, res ? res : ""); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gvfs-1.36.1/monitor/udisks2/gvfsudisks2volumemonitor.c new/gvfs-1.36.2/monitor/udisks2/gvfsudisks2volumemonitor.c --- old/gvfs-1.36.1/monitor/udisks2/gvfsudisks2volumemonitor.c 2018-04-09 16:42:15.000000000 +0200 +++ new/gvfs-1.36.2/monitor/udisks2/gvfsudisks2volumemonitor.c 2018-05-07 10:11:16.000000000 +0200 @@ -972,62 +972,19 @@ /* ---------------------------------------------------------------------------------------------------- */ static GVfsUDisks2Volume * -find_disc_volume_for_udisks_drive (GVfsUDisks2VolumeMonitor *monitor, - UDisksDrive *udisks_drive) +find_disc_volume_for_block (GVfsUDisks2VolumeMonitor *monitor, + UDisksBlock *block) { GVfsUDisks2Volume *ret = NULL; GList *l; for (l = monitor->disc_volumes; l != NULL; l = l->next) { - GVolume *volume = G_VOLUME (l->data); - GDrive *drive = g_volume_get_drive (volume); - if (drive != NULL) - { - if (gvfs_udisks2_drive_get_udisks_drive (GVFS_UDISKS2_DRIVE (drive)) == udisks_drive) - { - ret = GVFS_UDISKS2_VOLUME (volume); - g_object_unref (drive); - goto out; - } - g_object_unref (drive); - } - } - - out: - return ret; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -static GVfsUDisks2Mount * -find_disc_mount_for_udisks_drive (GVfsUDisks2VolumeMonitor *monitor, - UDisksDrive *udisks_drive) -{ - GVfsUDisks2Mount *ret = NULL; - GList *l; - - for (l = monitor->disc_mounts; l != NULL; l = l->next) - { - GMount *mount = G_MOUNT (l->data); - GVolume *volume; - - volume = g_mount_get_volume (mount); - if (volume != NULL) + GVfsUDisks2Volume *volume = GVFS_UDISKS2_VOLUME (l->data); + if (gvfs_udisks2_volume_get_block (volume) == block) { - GDrive *drive = g_volume_get_drive (volume); - if (drive != NULL) - { - if (gvfs_udisks2_drive_get_udisks_drive (GVFS_UDISKS2_DRIVE (drive)) == udisks_drive) - { - ret = GVFS_UDISKS2_MOUNT (mount); - g_object_unref (volume); - g_object_unref (drive); - goto out; - } - g_object_unref (drive); - } - g_object_unref (volume); + ret = volume; + goto out; } } @@ -1800,11 +1757,10 @@ gboolean coldplug) { GList *objects; - GList *cur_disc_drives; - GList *new_disc_drives; + GList *cur_disc_block_volumes; + GList *new_disc_block_volumes; GList *removed, *added; GList *l; - GVfsUDisks2Drive *drive; GVfsUDisks2Volume *volume; GVfsUDisks2Mount *mount; @@ -1817,22 +1773,19 @@ objects = g_dbus_object_manager_get_objects (udisks_client_get_object_manager (monitor->client)); - cur_disc_drives = NULL; + cur_disc_block_volumes = NULL; for (l = monitor->disc_volumes; l != NULL; l = l->next) { - volume = GVFS_UDISKS2_VOLUME (l->data); - drive = GVFS_UDISKS2_DRIVE (g_volume_get_drive (G_VOLUME (volume))); - if (drive != NULL) - { - cur_disc_drives = g_list_prepend (cur_disc_drives, gvfs_udisks2_drive_get_udisks_drive (drive)); - g_object_unref (drive); - } + cur_disc_block_volumes = g_list_prepend (cur_disc_block_volumes, + gvfs_udisks2_volume_get_block (GVFS_UDISKS2_VOLUME (l->data))); } - new_disc_drives = NULL; + new_disc_block_volumes = NULL; for (l = objects; l != NULL; l = l->next) { UDisksDrive *udisks_drive = udisks_object_peek_drive (UDISKS_OBJECT (l->data)); + UDisksBlock *block; + if (udisks_drive == NULL) continue; @@ -1844,20 +1797,25 @@ udisks_drive_get_optical_num_audio_tracks (udisks_drive) > 0)) continue; - new_disc_drives = g_list_prepend (new_disc_drives, udisks_drive); + block = udisks_client_get_block_for_drive (monitor->client, udisks_drive, FALSE); + if (block != NULL) + new_disc_block_volumes = g_list_prepend (new_disc_block_volumes, block); } - cur_disc_drives = g_list_sort (cur_disc_drives, (GCompareFunc) udisks_drive_compare); - new_disc_drives = g_list_sort (new_disc_drives, (GCompareFunc) udisks_drive_compare); - diff_sorted_lists (cur_disc_drives, new_disc_drives, (GCompareFunc) udisks_drive_compare, + cur_disc_block_volumes = g_list_sort (cur_disc_block_volumes, (GCompareFunc) block_compare); + new_disc_block_volumes = g_list_sort (new_disc_block_volumes, (GCompareFunc) block_compare); + diff_sorted_lists (cur_disc_block_volumes, new_disc_block_volumes, (GCompareFunc) block_compare, &added, &removed, NULL); for (l = removed; l != NULL; l = l->next) { - UDisksDrive *udisks_drive = UDISKS_DRIVE (l->data); + UDisksBlock *block = UDISKS_BLOCK (l->data); + + volume = find_disc_volume_for_block (monitor, block); - volume = find_disc_volume_for_udisks_drive (monitor, udisks_drive); - mount = find_disc_mount_for_udisks_drive (monitor, udisks_drive); + mount = NULL; + if (volume != NULL) + mount = GVFS_UDISKS2_MOUNT (g_volume_get_mount (G_VOLUME (volume))); if (mount != NULL) { @@ -1875,17 +1833,19 @@ for (l = added; l != NULL; l = l->next) { - UDisksDrive *udisks_drive = UDISKS_DRIVE (l->data); - UDisksBlock *block; + UDisksBlock *block = UDISKS_BLOCK (l->data); - block = udisks_client_get_block_for_drive (monitor->client, udisks_drive, FALSE); - if (block != NULL) + volume = find_disc_volume_for_block (monitor, block); + if (volume == NULL) { - volume = find_disc_volume_for_udisks_drive (monitor, udisks_drive); - if (volume == NULL) + UDisksDrive *udisks_drive; + + udisks_drive = udisks_client_get_drive_for_block (monitor->client, block); + if (udisks_drive != NULL) { gchar *uri; GFile *activation_root; + if (udisks_drive_get_optical_blank (udisks_drive)) { uri = g_strdup ("burn://"); @@ -1923,16 +1883,17 @@ g_object_unref (activation_root); g_free (uri); + g_object_unref (udisks_drive); } - g_object_unref (block); } + g_object_unref (block); } g_list_free (added); g_list_free (removed); - g_list_free (new_disc_drives); - g_list_free (cur_disc_drives); + g_list_free (new_disc_block_volumes); + g_list_free (cur_disc_block_volumes); g_list_free_full (objects, g_object_unref); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gvfs-1.36.1/po/sl.po new/gvfs-1.36.2/po/sl.po --- old/gvfs-1.36.1/po/sl.po 2018-04-09 16:42:15.000000000 +0200 +++ new/gvfs-1.36.2/po/sl.po 2018-05-07 10:11:16.000000000 +0200 @@ -105,7 +105,7 @@ #: monitor/proxy/gproxymount.c:502 monitor/proxy/gproxymount.c:587 #: monitor/proxy/gproxyvolume.c:863 monitor/proxy/gproxyvolume.c:927 msgid "Operation was cancelled" -msgstr "Opravilo je bilo preklicano." +msgstr "Opravilo je preklicano." #: client/gdaemonfileinputstream.c:1355 client/gdaemonfileoutputstream.c:1035 msgid "Seek not supported on stream" @@ -113,7 +113,7 @@ #: client/gdaemonfileoutputstream.c:1204 msgid "Truncate not supported on stream" -msgstr "Razčlenitev ni podprta na pretoku" +msgstr "Razčlenjevanje na pretoku ni podprto" #: client/gdaemonvfs.c:781 #, c-format @@ -127,7 +127,7 @@ #: common/gvfsdnssdresolver.c:208 #, c-format msgid "Error initializing Avahi: %s" -msgstr "Napaka med začenjanjem Avahi: %s" +msgstr "Napaka med začenjanjem programa Avahi: %s" #. Translators: #. * - the first %s refers to the service type @@ -148,11 +148,9 @@ #: common/gvfsdnssdresolver.c:1109 #, c-format msgid "" -"Error resolving “%s” service “%s” on domain “%s”. One or more TXT records " -"are missing. Keys required: “%s”." +"Error resolving “%s” service “%s” on domain “%s”. One or more TXT records are missing. Keys required: “%s”." msgstr "" -"Napaka med razreševanjem storitve »%s« »%s« na domeni »%s«. Manjka en ali " -"več besedilnih zapisov. Zahtevan ključ: »%s«." +"Napaka med razreševanjem storitve »%s« »%s« na domeni »%s«. Manjka en ali več besedilnih zapisov. Zahtevan ključ: »%s«." #. Translators: #. * - the first %s refers to the service type @@ -162,7 +160,7 @@ #: common/gvfsdnssdresolver.c:1124 #, c-format msgid "Timed out resolving “%s” service “%s” on domain “%s”" -msgstr "Časovni pretek razreševanja storitve »%s« »%s« na domeni »%s«" +msgstr "Razreševanje storitve »%s« »%s« na domeni »%s« je časovno poteklo." #: common/gvfsdnssdresolver.c:1164 msgid "Error initializing Avahi resolver" @@ -172,7 +170,7 @@ #: common/gvfsdnssdutils.c:280 #, c-format msgid "Malformed DNS-SD encoded_triple “%s”" -msgstr "Neveljaven zapis DNS-SD predmeta encoded_triple »%s«" +msgstr "Neveljaven zapis predmeta DNS-SD encoded_triple »%s«" #: common/gvfsicon.c:250 #, c-format @@ -284,20 +282,16 @@ #: daemon/gvfsafpserver.c:729 #, c-format msgid "" -"Unable to connect to the server “%s”. No suitable authentication mechanism " -"was found." +"Unable to connect to the server “%s”. No suitable authentication mechanism was found." msgstr "" -"Prijava na strežnik »%s« je spodletela. Ustreznega načina overitve ni mogoče " -"najti." +"Prijava na strežnik »%s« je spodletela. Ustreznega načina overitve ni mogoče najti." #: daemon/gvfsafpserver.c:804 #, c-format msgid "" -"Unable to connect to the server “%s”. The server doesn’t support AFP version " -"3.0 or later." +"Unable to connect to the server “%s”. The server doesn’t support AFP version 3.0 or later." msgstr "" -"Povezava na strežnik »%s« ni uspela. Strežnik ne podpira različice AFP 3.0 " -"ali novejše." +"Povezava na strežnik »%s« ni uspela. Strežnik ne podpira različice AFP 3.0 ali novejše." #: daemon/gvfsafpserver.c:915 msgid "Permission denied." @@ -337,8 +331,7 @@ #: daemon/gvfsafpserver.c:1366 daemon/gvfsafpserver.c:1766 msgid "Unable to connect to the server. A communication problem occurred." -msgstr "" -"Povezava na strežnik ni uspela. Prišlo je do težave pri izmenjavi podatkov." +msgstr "Povezava na strežnik ni uspela. Prišlo je do težave pri izmenjavi podatkov." #: daemon/gvfsafpserver.c:1722 msgid "Identification not found." @@ -2187,8 +2180,8 @@ "%s can be safely unplugged\n" "Device can be removed." msgstr "" -"Naprave %s ni mogoče varno odklopiti.\n" -"Trenutno naprave ni mogoče odstraniti." +"Napravo %s je mogoče varno odklopiti.\n" +"Napravo je mogoče odstraniti." #. Translators: This is used for encrypted volumes. #. * The first %s is the formatted size (e.g. "42.0 MB"). @@ -2223,7 +2216,7 @@ #: monitor/udisks2/gvfsudisks2volume.c:1218 msgid "The unlocked device does not have a recognizable file system on it" -msgstr "Odklenjena naprava ne vsebuje prepoznavnega datotečnega sistema." +msgstr "Odklenjena naprava je brez prepoznanega datotečnega sistema." #: monitor/udisks2/gvfsudisks2volume.c:1247 #, c-format
