Imported Upstream version 2.58.3
authorHyunjee Kim <hj0426.kim@samsung.com>
Tue, 3 Dec 2019 01:40:45 +0000 (10:40 +0900)
committerHyunjee Kim <hj0426.kim@samsung.com>
Tue, 3 Dec 2019 01:40:45 +0000 (10:40 +0900)
NEWS
configure.ac
gio/gunixmounts.c
gio/gwin32appinfo.c
gio/tests/trash.c
glib/tests/gvariant.c
gobject/gtype.h
meson.build

diff --git a/NEWS b/NEWS
index 605288b..0da0a42 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,19 @@
+Overview of changes in GLib 2.58.3
+==================================
+
+* Fix GVariant tests on i686 (#1626)
+
+* Fix crashes caused by filtering of mounts (#1645)
+
+* Bugs fixed:
+ - #1626 2.58.2 GVariant test failure on i686
+ - #1637 EXCEPTION_ACCESS_VIOLATION in g_clear_pointer
+ - #1645 2.58.2 introduces libgio segfaults
+ - !558 Backport Suppress -Wint-in-bool-context warning with G_DEFINE_INTERFACE and g++ to glib-2-58
+ - !577 Don't fail trash test if ~/.local doesn't exist or mount points can't be determined
+ - !578 gunixmounts: Fix segfaults caused by new filter of mounts
+
+
 Overview of changes in GLib 2.58.2
 ==================================
 
index 4b15b69..e18345d 100644 (file)
@@ -31,8 +31,8 @@ m4_define(glib_configure_ac)
 
 m4_define([glib_major_version], [2])
 m4_define([glib_minor_version], [58])
-m4_define([glib_micro_version], [2])
-m4_define([glib_interface_age], [2])
+m4_define([glib_micro_version], [3])
+m4_define([glib_interface_age], [3])
 m4_define([glib_binary_age],
           [m4_eval(100 * glib_minor_version + glib_micro_version)])
 m4_define([glib_version],
index 8cbd70f..6dc7741 100644 (file)
@@ -486,6 +486,11 @@ _g_get_unix_mounts (void)
   if (mnt_table_parse_mtab (table, NULL) < 0)
     goto out;
 
+  /* Use only the first mount for device, see comment from _g_get_unix_mounts
+   * in #else branch.
+   */
+  mnt_table_uniq_fs (table, MNT_UNIQ_FORWARD, uniq_fs_source_cmp);
+
   iter = mnt_new_iter (MNT_ITER_FORWARD);
   while (mnt_table_next_fs (table, iter, &fs) == 0)
     {
@@ -494,11 +499,6 @@ _g_get_unix_mounts (void)
       unsigned long mount_flags = 0;
       gboolean is_read_only = FALSE;
 
-      /* Use only the first mount for device, see comment from _g_get_unix_mounts
-       * in #else branch.
-       */
-      mnt_table_uniq_fs (table, MNT_UNIQ_FORWARD, uniq_fs_source_cmp);
-
       device_path = mnt_fs_get_source (fs);
       if (g_strcmp0 (device_path, "/dev/root") == 0)
         device_path = _resolve_dev_root ();
index 499bbb3..9f335b3 100644 (file)
@@ -1426,7 +1426,7 @@ collect_capable_apps_from_clients (GPtrArray *capable_apps,
       GWin32RegistrySubkeyIter subkey_iter;
       GWin32RegistryKey *system_client_type;
       GWin32RegistryValueType default_type;
-      gunichar2 *default_value;
+      gunichar2 *default_value = NULL;
       gunichar2 *client_name;
       gsize client_name_len;
 
index 1055585..4bf8fd0 100644 (file)
@@ -107,14 +107,54 @@ test_trash_symlinks (void)
 
   g_test_bug ("1522");
 
-  /* The test assumes that ~/.local always exists. */
   target = g_build_filename (g_get_home_dir (), ".local", NULL);
+
+  if (!g_file_test (target, G_FILE_TEST_IS_DIR))
+    {
+      gchar *message;
+
+      message = g_strdup_printf ("Directory '%s' does not exist", target);
+      g_test_skip (message);
+      g_free (message);
+      g_free (target);
+      return;
+    }
+
   target_mount = g_unix_mount_for (target, NULL);
+
+  if (target_mount == NULL)
+    {
+      gchar *message;
+
+      message = g_strdup_printf ("Unable to determine mount point for %s",
+                                 target);
+      g_test_skip (message);
+      g_free (message);
+      g_free (target);
+      return;
+    }
+
   g_assert_nonnull (target_mount);
   g_test_message ("Target: %s (mount: %s)", target, g_unix_mount_get_mount_path (target_mount));
 
   tmp = g_dir_make_tmp ("test-trashXXXXXX", &error);
+  g_assert_no_error (error);
+  g_assert_nonnull (tmp);
   tmp_mount = g_unix_mount_for (tmp, NULL);
+
+  if (tmp_mount == NULL)
+    {
+      gchar *message;
+
+      message = g_strdup_printf ("Unable to determine mount point for %s", tmp);
+      g_test_skip (message);
+      g_free (message);
+      g_unix_mount_free (target_mount);
+      g_free (target);
+      g_free (tmp);
+      return;
+    }
+
   g_assert_nonnull (tmp_mount);
   g_test_message ("Tmp: %s (mount: %s)", tmp, g_unix_mount_get_mount_path (tmp_mount));
 
index 8047ef5..18800f9 100644 (file)
@@ -4770,6 +4770,7 @@ test_stack_dict_init (void)
 static void
 test_normal_checking_tuples (void)
 {
+  gpointer aligned_data;
   const guint8 data[] = {
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
     'a', '(', 'a', 'o', 'a', 'o', 'a', 'a', 'o', 'a', 'a', 'o', ')'
@@ -4778,13 +4779,15 @@ test_normal_checking_tuples (void)
   GVariant *variant = NULL;
   GVariant *normal_variant = NULL;
 
-  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, data, size,
+  aligned_data = g_memdup (data, size); /* guarantee alignment */
+  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, aligned_data, size,
                                      FALSE, NULL, NULL);
   g_assert_nonnull (variant);
 
   normal_variant = g_variant_get_normal_form (variant);
   g_assert_nonnull (normal_variant);
 
+  g_free (aligned_data);
   g_variant_unref (normal_variant);
   g_variant_unref (variant);
 }
@@ -4896,6 +4899,7 @@ test_recursion_limits_array_in_variant (void)
 static void
 test_normal_checking_array_offsets (void)
 {
+  gpointer aligned_data;
   const guint8 data[] = {
     0x07, 0xe5, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
     'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'g',
@@ -4904,13 +4908,15 @@ test_normal_checking_array_offsets (void)
   GVariant *variant = NULL;
   GVariant *normal_variant = NULL;
 
-  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, data, size,
+  aligned_data = g_memdup (data, size); /* guarantee alignment */
+  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, aligned_data, size,
                                      FALSE, NULL, NULL);
   g_assert_nonnull (variant);
 
   normal_variant = g_variant_get_normal_form (variant);
   g_assert_nonnull (normal_variant);
 
+  g_free (aligned_data);
   g_variant_unref (normal_variant);
   g_variant_unref (variant);
 }
@@ -4920,6 +4926,7 @@ test_normal_checking_array_offsets (void)
 static void
 test_normal_checking_tuple_offsets (void)
 {
+  gpointer aligned_data;
   const guint8 data[] = {
     0x07, 0xe5, 0x00, 0x07, 0x00, 0x07,
     '(', 'a', 's', 'a', 's', 'a', 's', 'a', 's', 'a', 's', 'a', 's', ')',
@@ -4928,13 +4935,15 @@ test_normal_checking_tuple_offsets (void)
   GVariant *variant = NULL;
   GVariant *normal_variant = NULL;
 
-  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, data, size,
-                                     FALSE, NULL, NULL);
+  aligned_data = g_memdup (data, size); /* guarantee alignment */
+  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, aligned_data,
+                                     size, FALSE, NULL, NULL);
   g_assert_nonnull (variant);
 
   normal_variant = g_variant_get_normal_form (variant);
   g_assert_nonnull (normal_variant);
 
+  g_free (aligned_data);
   g_variant_unref (normal_variant);
   g_variant_unref (variant);
 }
@@ -4944,6 +4953,7 @@ test_normal_checking_tuple_offsets (void)
 static void
 test_normal_checking_empty_object_path (void)
 {
+  gpointer aligned_data;
   const guint8 data[] = {
     0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
     '(', 'h', '(', 'a', 'i', 'a', 'b', 'i', 'o', ')', ')',
@@ -4952,13 +4962,15 @@ test_normal_checking_empty_object_path (void)
   GVariant *variant = NULL;
   GVariant *normal_variant = NULL;
 
-  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, data, size,
+  aligned_data = g_memdup (data, size); /* guarantee alignment */
+  variant = g_variant_new_from_data (G_VARIANT_TYPE_VARIANT, aligned_data, size,
                                      FALSE, NULL, NULL);
   g_assert_nonnull (variant);
 
   normal_variant = g_variant_get_normal_form (variant);
   g_assert_nonnull (normal_variant);
 
+  g_free (aligned_data);
   g_variant_unref (normal_variant);
   g_variant_unref (variant);
 }
index 77e22a0..0d366e6 100644 (file)
@@ -2023,7 +2023,7 @@ type_name##_get_type (void) \
                                        0, \
                                        (GInstanceInitFunc)NULL, \
                                        (GTypeFlags) 0); \
-      if (TYPE_PREREQ) \
+      if (TYPE_PREREQ != G_TYPE_INVALID) \
         g_type_interface_add_prerequisite (g_define_type_id, TYPE_PREREQ); \
       { /* custom code follows */
 #define _G_DEFINE_INTERFACE_EXTENDED_END()     \
index 0cc6e94..f7405a2 100644 (file)
@@ -1,5 +1,5 @@
 project('glib', 'c', 'cpp',
-  version : '2.58.2',
+  version : '2.58.3',
   meson_version : '>= 0.47.0',
   default_options : [
     'buildtype=debugoptimized',