Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package glib2 for openSUSE:Factory checked 
in at 2023-12-08 22:31:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/glib2 (Old)
 and      /work/SRC/openSUSE:Factory/.glib2.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "glib2"

Fri Dec  8 22:31:10 2023 rev:275 rq:1131631 version:2.78.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/glib2/glib2.changes      2023-11-29 
21:19:42.870922049 +0100
+++ /work/SRC/openSUSE:Factory/.glib2.new.25432/glib2.changes   2023-12-08 
22:31:11.346091718 +0100
@@ -1,0 +2,29 @@
+Thu Dec  7 10:52:01 UTC 2023 - Bjørn Lie <bjorn....@gmail.com>
+
+- Update to version 2.78.3:
+  + Fix a crash-causing regression in xdgmime
+  + Bugs fixed:
+    - Crash in __gio_xdg_cache_mime_type_subclass
+    - Backport “xdgmime: Update to upstream commit c2c814d4051f232”
+      to glib-2-78
+
+-------------------------------------------------------------------
+Tue Dec  5 15:35:51 UTC 2023 - Bjørn Lie <bjorn....@gmail.com>
+
+- Update to version 2.78.2:
+  + Bugs fixed:
+    - check for #ifdef PTRACE_O_EXITKILL will always fail since it
+      isn't a macro
+    - gsubprocess build-time test intermittently timing out since
+      2.78.1
+    - “meson: Improve PTRACE_O_EXITKILL presence check”
+    - “Make GQuark register intentional leaks”
+    - “gsignalgroup: Avoid function call with side effect in
+      g_return_* macro”
+    - “tests: Don't assume that sh optimizes simple commands into
+      exec”
+    - “xdgmime: Handle buggy type definitions with circular
+      inheritance”
+    - “collate: Don't segfault on bad input”
+
+-------------------------------------------------------------------
@@ -399 +428,18 @@
-- Drop glib2-dbus-socket-path.patch: fixed upstream.
+- Drop patches:
+  + glib2-dbus-socket-path.patch: fixed upstream.
+  + glib2-fix-normal-form-handling-in-gvariant.patch: fixed upstream
+
+-------------------------------------------------------------------
+Tue Feb 23 16:14:12 UTC 2023 - Alynx Zhou <alynx.z...@suse.com>
+
+- Update glib2-fix-normal-form-handling-in-gvariant.patch:
+  Backported from upstream to fix regression on s390x.
+  (bsc#1210135, glgo#GNOME/glib!2978)
+
+-------------------------------------------------------------------
+Fri Feb 23 15:00:15 UTC 2023 - Alynx Zhou <alynx.z...@suse.com>
+
+- Add glib2-fix-normal-form-handling-in-gvariant.patch: Backported
+  from upstream to fix normal form handling in GVariant.
+  (CVE-2023-24593, CVE-2023-25180, bsc#1209714, bsc#1209713,
+  glgo#GNOME/glib!3125)

Old:
----
  glib-2.78.1.tar.xz

New:
----
  glib-2.78.3.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ glib2.spec ++++++
--- /var/tmp/diff_new_pack.eRshu3/_old  2023-12-08 22:31:12.658139994 +0100
+++ /var/tmp/diff_new_pack.eRshu3/_new  2023-12-08 22:31:12.658139994 +0100
@@ -30,7 +30,7 @@
 %define libgthread libgthread-%{libver}
 %bcond_without     systemtap
 Name:           glib2%{psuffix}
-Version:        2.78.1
+Version:        2.78.3
 Release:        0
 Summary:        General-Purpose Utility Library
 License:        LGPL-2.1-or-later

++++++ glib-2.78.1.tar.xz -> glib-2.78.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/NEWS new/glib-2.78.3/NEWS
--- old/glib-2.78.1/NEWS        2023-10-25 13:33:59.000000000 +0200
+++ new/glib-2.78.3/NEWS        2023-12-06 19:03:55.000000000 +0100
@@ -1,3 +1,37 @@
+Overview of changes in GLib 2.78.3, 2023-12-06
+==============================================
+
+* Fix a crash-causing regression in xdgmime (#3191, work by Philip Withnall)
+
+* Bugs fixed:
+  - #3191 Crash in __gio_xdg_cache_mime_type_subclass (Philip Withnall)
+  - !3747 Backport !3742 “xdgmime: Update to upstream commit 
c2c814d4051f232” to
+    glib-2-78
+
+
+Overview of changes in GLib 2.78.2, 2023-12-05
+==============================================
+
+* Bugs fixed:
+  - #3156 check for #ifdef PTRACE_O_EXITKILL will always fail since it isn't a
+    macro (Alessandro Bono)
+  - #3157 gsubprocess build-time test intermittently timing out since 2.78.1
+    (Simon McVittie)
+  - !3673 Backport !3669 “meson: Improve PTRACE_O_EXITKILL presence check” 
to
+    glib-2-78
+  - !3680 Backport !3677 “Make GQuark register intentional leaks” to 
glib-2-78
+  - !3681 Backport 3678 “gsignalgroup: Avoid function call with side effect 
in
+    g_return_* macro” to glib-2-78
+  - !3686 Backport !3685 “tests: Don't assume that sh optimizes simple 
commands
+    into exec” to glib-2-78
+  - !3718 Backport !3714 “xdgmime: Handle buggy type definitions with 
circular
+    inheritance” to glib-2-78
+  - !3727 Backport !3725 “collate: Don't segfault on bad input” to 
glib-2-78
+
+* Translation updates:
+  - Ukrainian (Yuri Chornoivan)
+
+
 Overview of changes in GLib 2.78.1, 2023-10-25
 ==============================================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/tests/gsubprocess-testprog.c 
new/glib-2.78.3/gio/tests/gsubprocess-testprog.c
--- old/glib-2.78.1/gio/tests/gsubprocess-testprog.c    2023-10-25 
13:33:59.000000000 +0200
+++ new/glib-2.78.3/gio/tests/gsubprocess-testprog.c    2023-12-06 
19:03:55.000000000 +0100
@@ -275,7 +275,7 @@
   /* Run sleep "forever" in a shell; this will trigger PTRACE_EVENT_EXEC */
   g_ptr_array_add (args, g_strdup ("sh"));
   g_ptr_array_add (args, g_strdup ("-c"));
-  g_ptr_array_add (args, g_strdup ("sleep infinity"));
+  g_ptr_array_add (args, g_strdup ("exec sleep infinity"));
   g_ptr_array_add (args, NULL);
   launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_NONE);
   proc = g_subprocess_launcher_spawnv (launcher, (const gchar **) args->pdata, 
&local_error);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/tests/gsubprocess.c 
new/glib-2.78.3/gio/tests/gsubprocess.c
--- old/glib-2.78.1/gio/tests/gsubprocess.c     2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/tests/gsubprocess.c     2023-12-06 19:03:55.000000000 
+0100
@@ -2006,7 +2006,7 @@
   g_assert_no_errno (waitpid (main_child, &wstatus, 0));
   g_assert_no_errno (ptrace (PTRACE_SETOPTIONS, main_child, NULL,
                              (PTRACE_O_TRACEFORK |
-#ifdef PTRACE_O_EXITKILL
+#ifdef HAVE_PTRACE_O_EXITKILL
                               PTRACE_O_EXITKILL |
 #endif
                               PTRACE_O_TRACEVFORK |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmime.c 
new/glib-2.78.3/gio/xdgmime/xdgmime.c
--- old/glib-2.78.1/gio/xdgmime/xdgmime.c       2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmime.c       2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003,2004  Red Hat, Inc.
  * Copyright (C) 2003,2004  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
@@ -143,7 +127,7 @@
 
 static int
 xdg_mime_init_from_directory (const char *directory,
-                              void       *user_data)
+                              void       *user_data 
__attribute__((__unused__)))
 {
   char *file_name;
   struct stat st;
@@ -835,13 +819,16 @@
 
 int
 _xdg_mime_mime_type_subclass (const char *mime,
-                             const char *base)
+                             const char *base,
+                             const char ***seen)
 {
-  const char *umime, *ubase;
-  const char **parents;
+  const char *umime, *ubase, *parent;
+  const char **parents, **first_seen = NULL, **new_seen;
+
+  int i, ret = 0;
 
   if (_caches)
-    return _xdg_mime_cache_mime_type_subclass (mime, base);
+    return _xdg_mime_cache_mime_type_subclass (mime, base, NULL);
 
   umime = _xdg_mime_unalias_mime_type (mime);
   ubase = _xdg_mime_unalias_mime_type (base);
@@ -864,15 +851,42 @@
   if (strcmp (ubase, "application/octet-stream") == 0 &&
       strncmp (umime, "inode/", 6) != 0)
     return 1;
-  
+
+  if (!seen)
+    {
+      first_seen = calloc (1, sizeof (char *));
+      seen = &first_seen;
+    }
+
   parents = _xdg_mime_parent_list_lookup (parent_list, umime);
   for (; parents && *parents; parents++)
     {
-      if (_xdg_mime_mime_type_subclass (*parents, ubase))
-       return 1;
+      parent = *parents;
+
+      /* Detect and avoid buggy circular relationships */
+      for (i = 0; (*seen)[i] != NULL; i++)
+        if (parent == (*seen)[i])
+          goto next_parent;
+      new_seen = realloc (*seen, (i + 2) * sizeof (char *));
+      if (!new_seen)
+        goto done;
+      new_seen[i] = parent;
+      new_seen[i + 1] = NULL;
+      *seen = new_seen;
+
+      if (_xdg_mime_mime_type_subclass (parent, ubase, seen))
+        {
+          ret = 1;
+          goto done;
+        }
+
+    next_parent:
+      continue;
     }
 
-  return 0;
+done:
+  free (first_seen);
+  return ret;
 }
 
 int
@@ -881,7 +895,7 @@
 {
   xdg_mime_init ();
 
-  return _xdg_mime_mime_type_subclass (mime, base);
+  return _xdg_mime_mime_type_subclass (mime, base, NULL);
 }
 
 char **
@@ -891,6 +905,8 @@
   char **result;
   int i, n;
 
+  xdg_mime_init ();
+
   if (_caches)
     return _xdg_mime_cache_list_mime_parents (mime);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmime.h 
new/glib-2.78.3/gio/xdgmime/xdgmime.h
--- old/glib-2.78.1/gio/xdgmime/xdgmime.h       2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmime.h       2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 
@@ -125,7 +109,8 @@
 int          _xdg_mime_mime_type_equal             (const char *mime_a,
                                                    const char *mime_b);
 int          _xdg_mime_mime_type_subclass          (const char *mime,
-                                                   const char *base);
+                                                   const char *base,
+                                                   const char ***seen);
 const char  *_xdg_mime_unalias_mime_type           (const char *mime);
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimealias.c 
new/glib-2.78.3/gio/xdgmime/xdgmimealias.c
--- old/glib-2.78.1/gio/xdgmime/xdgmimealias.c  2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimealias.c  2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2004  Red Hat, Inc.
  * Copyright (C) 2004  Matthias Clasen <mcla...@redhat.com>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimealias.h 
new/glib-2.78.3/gio/xdgmime/xdgmimealias.h
--- old/glib-2.78.1/gio/xdgmime/xdgmimealias.h  2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimealias.h  2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2004  Red Hat, Inc.
  * Copyright (C) 200  Matthias Clasen <mcla...@redhat.com>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifndef __XDG_MIME_ALIAS_H__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimecache.c 
new/glib-2.78.3/gio/xdgmime/xdgmimecache.c
--- old/glib-2.78.1/gio/xdgmime/xdgmimecache.c  2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimecache.c  2023-12-06 19:03:55.000000000 
+0100
@@ -5,23 +5,7 @@
  *
  * Copyright (C) 2005  Matthias Clasen <mcla...@redhat.com>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
@@ -92,6 +76,13 @@
 #define GET_UINT16(cache,offset) (ntohs(*(xdg_uint16_t*)((cache) + (offset))))
 #define GET_UINT32(cache,offset) (ntohl(*(xdg_uint32_t*)((cache) + (offset))))
 
+// Validates that it is safe to call GET_UINT32() at
+// cache->buffer[offset + (n * record_size)]. Ensures that offset is aligned to
+// a 4-byte boundary, and that offset+(n*record_size) does not overflow.
+// `record_size` values are known constants and never 0.
+#define OUT_OF_BOUNDS(offset,n,record_size,max) \
+  (((offset) & 0x3) || (offset) > (max) || (n) > ((max) - (offset)) / 
(record_size))
+
 XdgMimeCache *
 _xdg_mime_cache_ref (XdgMimeCache *cache)
 {
@@ -132,7 +123,8 @@
   if (fd < 0)
     return NULL;
   
-  if (fstat (fd, &st) < 0 || st.st_size < 4)
+  // A valid cache must be at least 40 bytes for the header.
+  if (fstat (fd, &st) < 0 || st.st_size < 40)
     goto done;
 
   buffer = (char *) mmap (NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
@@ -225,6 +217,8 @@
 {
   xdg_uint32_t n_children = GET_UINT32 (cache->buffer, offset + 24);
   xdg_uint32_t child_offset = GET_UINT32 (cache->buffer, offset + 28);
+  if (OUT_OF_BOUNDS (child_offset, n_children, 32, cache->size))
+    return FALSE;
 
   xdg_uint32_t i;
   
@@ -255,6 +249,8 @@
   xdg_uint32_t mimetype_offset = GET_UINT32 (cache->buffer, offset + 4);
   xdg_uint32_t n_matchlets = GET_UINT32 (cache->buffer, offset + 8);
   xdg_uint32_t matchlet_offset = GET_UINT32 (cache->buffer, offset + 12);
+  if (OUT_OF_BOUNDS (matchlet_offset, n_matchlets, 32, cache->size))
+    return NULL;
 
   xdg_uint32_t i;
 
@@ -287,8 +283,13 @@
   *prio = 0;
 
   list_offset = GET_UINT32 (cache->buffer, 24);
+  if (OUT_OF_BOUNDS (list_offset, 1, 12, cache->size))
+    return NULL;
+
   n_entries = GET_UINT32 (cache->buffer, list_offset);
   offset = GET_UINT32 (cache->buffer, list_offset + 8);
+  if (OUT_OF_BOUNDS (offset, n_entries, 16, cache->size))
+    return NULL;
   
   for (j = 0; j < n_entries; j++)
     {
@@ -320,7 +321,12 @@
         continue;
 
       list_offset = GET_UINT32 (cache->buffer, 4);
+      if (OUT_OF_BOUNDS (list_offset, 1, 4, cache->size))
+        continue;
+
       n_entries = GET_UINT32 (cache->buffer, list_offset);
+      if (OUT_OF_BOUNDS (list_offset + 4, n_entries, 8, cache->size))
+        continue;
 
       min = 0; 
       max = n_entries - 1;
@@ -361,6 +367,8 @@
   const char *ptr;
   int i, min, max, mid, cmp;
 
+  assert (n_mime_types > 0);
+
   for (i = 0; _caches[i]; i++)
     {
       XdgMimeCache *cache = _caches[i];
@@ -372,7 +380,12 @@
         continue;
 
       list_offset = GET_UINT32 (cache->buffer, 12);
+      if (OUT_OF_BOUNDS (list_offset, 1, 4, cache->size))
+        continue;
+
       n_entries = GET_UINT32 (cache->buffer, list_offset);
+      if (OUT_OF_BOUNDS (list_offset + 4, n_entries, 12, cache->size))
+        continue;
 
       min = 0; 
       max = n_entries - 1;
@@ -433,7 +446,12 @@
         continue;
 
       list_offset = GET_UINT32 (cache->buffer, 20);
+      if (OUT_OF_BOUNDS (list_offset, 1, 4, cache->size))
+        continue;
+
       n_entries = GET_UINT32 (cache->buffer, list_offset);
+      if (OUT_OF_BOUNDS (list_offset + 4, n_entries, 12, cache->size))
+        continue;
 
       for (j = 0; j < n_entries && n < n_mime_types; j++)
        {
@@ -504,6 +522,8 @@
           n = 0;
           n_children = GET_UINT32 (cache->buffer, offset + 12 * mid + 4);
           child_offset = GET_UINT32 (cache->buffer, offset + 12 * mid + 8);
+          if (OUT_OF_BOUNDS (child_offset, n_children, 12, cache->size))
+            continue;
       
           if (len > 0)
             {
@@ -565,8 +585,13 @@
         continue;
 
       list_offset = GET_UINT32 (cache->buffer, 16);
+      if (OUT_OF_BOUNDS (list_offset, 1, 8, cache->size))
+        continue;
+
       n_entries = GET_UINT32 (cache->buffer, list_offset);
       offset = GET_UINT32 (cache->buffer, list_offset + 4);
+      if (OUT_OF_BOUNDS (offset, n_entries, 12, cache->size))
+        continue;
 
       n += cache_glob_node_lookup_suffix (cache,
                                          n_entries, offset,
@@ -707,6 +732,9 @@
         continue;
 
       offset = GET_UINT32 (cache->buffer, 24);
+      if (OUT_OF_BOUNDS (offset, 1, 8, cache->size))
+        continue;
+
       max_extent = MAX (max_extent, GET_UINT32 (cache->buffer, offset + 4));
     }
 
@@ -751,8 +779,8 @@
       /* Pick glob-result R where mime_type inherits from R */
       for (n = 0; n < n_mime_types; n++)
         {
-          if (mime_types[n] && 
_xdg_mime_cache_mime_type_subclass(mime_types[n], mime_type))
-              return mime_types[n];
+          if (mime_types[n] && _xdg_mime_cache_mime_type_subclass 
(mime_types[n], mime_type, NULL))
+            return mime_types[n];
         }
       if (n == 0)
         {
@@ -901,13 +929,15 @@
 
 int
 _xdg_mime_cache_mime_type_subclass (const char *mime,
-                                   const char *base)
+                                   const char *base,
+                                   const char ***seen)
 {
-  const char *umime, *ubase;
+  const char *umime, *ubase, *parent;
+  const char **first_seen = NULL, **new_seen;
 
   xdg_uint32_t j;
-  int i, min, max, med, cmp;
-  
+  int i, k, min, max, med, cmp, ret = 0;
+
   umime = _xdg_mime_cache_unalias_mime_type (mime);
   ubase = _xdg_mime_cache_unalias_mime_type (base);
 
@@ -932,7 +962,13 @@
   if (strcmp (ubase, "application/octet-stream") == 0 &&
       strncmp (umime, "inode/", 6) != 0)
     return 1;
- 
+
+  if (!seen)
+    {
+      first_seen = calloc (1, sizeof (char *));
+      seen = &first_seen;
+    }
+
   for (i = 0; _caches[i]; i++)
     {
       XdgMimeCache *cache = _caches[i];
@@ -944,7 +980,12 @@
         continue;
 
       list_offset = GET_UINT32 (cache->buffer, 8);
+      if (OUT_OF_BOUNDS (list_offset, 1, 4, cache->size))
+        continue;
+
       n_entries = GET_UINT32 (cache->buffer, list_offset);
+      if (OUT_OF_BOUNDS (list_offset + 4, n_entries, 8, cache->size))
+        continue;
 
       min = 0; 
       max = n_entries - 1;
@@ -966,10 +1007,27 @@
              for (j = 0; j < n_parents; j++)
                {
                  parent_offset = GET_UINT32 (cache->buffer, offset + 4 + 4 * 
j);
-                 if (strcmp (cache->buffer + parent_offset, mime) != 0 &&
-                     strcmp (cache->buffer + parent_offset, umime) != 0 &&
-                     _xdg_mime_cache_mime_type_subclass (cache->buffer + 
parent_offset, ubase))
-                   return 1;
+                 parent = cache->buffer + parent_offset;
+
+                 /* Detect and avoid buggy circular relationships */
+                 for (k = 0; (*seen)[k] != NULL; k++)
+                   if (parent == (*seen)[k])
+                     goto next_parent;
+                 new_seen = realloc (*seen, (k + 2) * sizeof (char *));
+                 if (!new_seen)
+                   goto done;
+                 new_seen[k] = parent;
+                 new_seen[k + 1] = NULL;
+                 *seen = new_seen;
+
+                 if (_xdg_mime_cache_mime_type_subclass (parent, ubase, seen))
+                   {
+                     ret = 1;
+                     goto done;
+                   }
+
+               next_parent:
+                 continue;
                }
 
              break;
@@ -977,7 +1035,9 @@
        }
     }
 
-  return 0;
+done:
+  free (first_seen);
+  return ret;
 }
 
 const char *
@@ -1014,7 +1074,12 @@
         continue;
 
       list_offset = GET_UINT32 (cache->buffer, 8);
+      if (OUT_OF_BOUNDS (list_offset, 1, 4, cache->size))
+        continue;
+
       n_entries = GET_UINT32 (cache->buffer, list_offset);
+      if (OUT_OF_BOUNDS (list_offset + 4, n_entries, 8, cache->size))
+        continue;
 
       for (j = 0; j < n_entries; j++)
        {
@@ -1056,7 +1121,7 @@
 }
 
 static const char *
-cache_lookup_icon (const char *mime, int header)
+cache_lookup_icon (const char *mime, size_t header)
 {
   const char *ptr;
   int i, min, max, mid, cmp;
@@ -1071,8 +1136,16 @@
       if (cache->buffer == NULL)
         continue;
 
+      if (OUT_OF_BOUNDS (header, 1, 4, cache->size))
+        continue;
+
       list_offset = GET_UINT32 (cache->buffer, header);
+      if (OUT_OF_BOUNDS (list_offset, 1, 4, cache->size))
+        continue;
+
       n_entries = GET_UINT32 (cache->buffer, list_offset);
+      if (OUT_OF_BOUNDS (list_offset + 4, n_entries, 8, cache->size))
+        continue;
 
       min = 0; 
       max = n_entries - 1;
@@ -1127,6 +1200,9 @@
   mime_offset = GET_UINT32 (cache->buffer, offset + 4);
   n_children = GET_UINT32 (cache->buffer, offset + 8);
   child_offset = GET_UINT32 (cache->buffer, offset + 12);
+  if (OUT_OF_BOUNDS (child_offset, n_children, 20, cache->size))
+    return;
+
   for (i = 0; i < depth; i++)
     printf (" ");
   printf ("%c", character);
@@ -1151,12 +1227,18 @@
     xdg_uint32_t n_entries;
     xdg_uint32_t offset;
 
-      if (cache->buffer == NULL)
-        continue;
+    if (cache->buffer == NULL)
+      continue;
 
     list_offset = GET_UINT32 (cache->buffer, 16);
+    if (OUT_OF_BOUNDS (list_offset, 1, 8, cache->size))
+      return;
+
     n_entries = GET_UINT32 (cache->buffer, list_offset);
     offset = GET_UINT32 (cache->buffer, list_offset + 4);
+    if (OUT_OF_BOUNDS (offset, n_entries, 20, cache->size))
+      return;
+
     for (j = 0; j < n_entries; j++)
            dump_glob_node (cache, offset + 20 * j, 0);
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimecache.h 
new/glib-2.78.3/gio/xdgmime/xdgmimecache.h
--- old/glib-2.78.1/gio/xdgmime/xdgmimecache.h  2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimecache.h  2023-12-06 19:03:55.000000000 
+0100
@@ -5,23 +5,7 @@
  *
  * Copyright (C) 2005  Matthias Clasen <mcla...@redhat.com>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifndef __XDG_MIME_CACHE_H__
@@ -70,7 +54,8 @@
 int          _xdg_mime_cache_media_type_equal             (const char *mime_a,
                                                           const char *mime_b);
 int          _xdg_mime_cache_mime_type_subclass           (const char *mime_a,
-                                                          const char *mime_b);
+                                                          const char *mime_b,
+                                                          const char ***seen);
 char       **_xdg_mime_cache_list_mime_parents           (const char *mime);
 const char  *_xdg_mime_cache_unalias_mime_type            (const char *mime);
 int          _xdg_mime_cache_get_max_buffer_extents       (void);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeglob.c 
new/glib-2.78.3/gio/xdgmime/xdgmimeglob.c
--- old/glib-2.78.1/gio/xdgmime/xdgmimeglob.c   2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeglob.c   2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeglob.h 
new/glib-2.78.3/gio/xdgmime/xdgmimeglob.h
--- old/glib-2.78.1/gio/xdgmime/xdgmimeglob.h   2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeglob.h   2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifndef __XDG_MIME_GLOB_H__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeicon.c 
new/glib-2.78.3/gio/xdgmime/xdgmimeicon.c
--- old/glib-2.78.1/gio/xdgmime/xdgmimeicon.c   2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeicon.c   2023-12-06 19:03:55.000000000 
+0100
@@ -5,23 +5,7 @@
  *
  * Copyright (C) 2008  Red Hat, Inc.
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeicon.h 
new/glib-2.78.3/gio/xdgmime/xdgmimeicon.h
--- old/glib-2.78.1/gio/xdgmime/xdgmimeicon.h   2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeicon.h   2023-12-06 19:03:55.000000000 
+0100
@@ -5,23 +5,7 @@
  *
  * Copyright (C) 2008  Red Hat, Inc.
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifndef __XDG_MIME_ICON_H__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeint.c 
new/glib-2.78.3/gio/xdgmime/xdgmimeint.c
--- old/glib-2.78.1/gio/xdgmime/xdgmimeint.c    2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeint.c    2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
@@ -131,7 +115,7 @@
 }
 
 int
-_xdg_utf8_validate (const char *source)
+_xdg_utf8_validate (const char *source __attribute__((unused)))
 {
   /* FIXME: actually write */
   return TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeint.h 
new/glib-2.78.3/gio/xdgmime/xdgmimeint.h
--- old/glib-2.78.1/gio/xdgmime/xdgmimeint.h    2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeint.h    2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifndef __XDG_MIME_INT_H__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimemagic.c 
new/glib-2.78.3/gio/xdgmime/xdgmimemagic.c
--- old/glib-2.78.1/gio/xdgmime/xdgmimemagic.c  2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimemagic.c  2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
@@ -798,6 +782,11 @@
          break;
        case XDG_MIME_MAGIC_ERROR:
          state = _xdg_mime_magic_parse_error (magic_file);
+
+         /* After a parse error we can only be at EOF or reset to starting a
+          * new section. */
+         assert (state == XDG_MIME_MAGIC_EOF || state == 
XDG_MIME_MAGIC_SECTION);
+
          break;
        case XDG_MIME_MAGIC_EOF:
        default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimemagic.h 
new/glib-2.78.3/gio/xdgmime/xdgmimemagic.h
--- old/glib-2.78.1/gio/xdgmime/xdgmimemagic.h  2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimemagic.h  2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <j...@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifndef __XDG_MIME_MAGIC_H__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeparent.c 
new/glib-2.78.3/gio/xdgmime/xdgmimeparent.c
--- old/glib-2.78.1/gio/xdgmime/xdgmimeparent.c 2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeparent.c 2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2004  Red Hat, Inc.
  * Copyright (C) 2004  Matthias Clasen <mcla...@redhat.com>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gio/xdgmime/xdgmimeparent.h 
new/glib-2.78.3/gio/xdgmime/xdgmimeparent.h
--- old/glib-2.78.1/gio/xdgmime/xdgmimeparent.h 2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gio/xdgmime/xdgmimeparent.h 2023-12-06 19:03:55.000000000 
+0100
@@ -6,23 +6,7 @@
  * Copyright (C) 2004  Red Hat, Inc.
  * Copyright (C) 200  Matthias Clasen <mcla...@redhat.com>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifndef __XDG_MIME_PARENT_H__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/glib/gquark.c 
new/glib-2.78.3/glib/gquark.c
--- old/glib-2.78.1/glib/gquark.c       2023-10-25 13:33:59.000000000 +0200
+++ new/glib-2.78.3/glib/gquark.c       2023-12-06 19:03:55.000000000 +0100
@@ -43,6 +43,7 @@
 #include "gtestutils.h"
 #include "glib_trace.h"
 #include "glib-init.h"
+#include "glib-private.h"
 
 #define QUARK_BLOCK_SIZE         2048
 #define QUARK_STRING_BLOCK_SIZE (4096 - sizeof (gsize))
@@ -301,6 +302,7 @@
        * us to do lockless lookup of the arrays, and there shouldn't be that
        * many quarks in an app
        */
+      g_ignore_leak (g_atomic_pointer_get (&quarks));
       g_atomic_pointer_set (&quarks, quarks_new);
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/glib/gunicollate.c 
new/glib-2.78.3/glib/gunicollate.c
--- old/glib-2.78.1/glib/gunicollate.c  2023-10-25 13:33:59.000000000 +0200
+++ new/glib-2.78.3/glib/gunicollate.c  2023-12-06 19:03:55.000000000 +0100
@@ -401,6 +401,8 @@
 
   str_norm = _g_utf8_normalize_wc (str, len, G_NORMALIZE_ALL_COMPOSE);
 
+  g_return_val_if_fail (str_norm != NULL, NULL);
+
   xfrm_len = wcsxfrm (NULL, (wchar_t *)str_norm, 0);
   result_wc = g_new (wchar_t, xfrm_len + 1);
   wcsxfrm (result_wc, (wchar_t *)str_norm, xfrm_len + 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/glib/tests/unicode-normalize.c 
new/glib-2.78.3/glib/tests/unicode-normalize.c
--- old/glib-2.78.1/glib/tests/unicode-normalize.c      2023-10-25 
13:33:59.000000000 +0200
+++ new/glib-2.78.3/glib/tests/unicode-normalize.c      2023-12-06 
19:03:55.000000000 +0100
@@ -182,6 +182,19 @@
     }
 }
 
+static void
+test_unicode_normalize_bad_length (void)
+{
+  const char *input = "fórmula, vol. 2 (deluxe edition)";
+  gsize len = 2;
+  char *output;
+
+  output = g_utf8_normalize (input, len, G_NORMALIZE_ALL_COMPOSE);
+  g_assert_null (output);
+
+  g_free (output);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -190,6 +203,7 @@
   g_test_add_func ("/unicode/normalize", test_unicode_normalize);
   g_test_add_func ("/unicode/normalize-invalid",
                    test_unicode_normalize_invalid);
+  g_test_add_func ("/unicode/normalize/bad-length", 
test_unicode_normalize_bad_length);
 
   return g_test_run ();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gobject/gsignalgroup.c 
new/glib-2.78.3/gobject/gsignalgroup.c
--- old/glib-2.78.1/gobject/gsignalgroup.c      2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gobject/gsignalgroup.c      2023-12-06 19:03:55.000000000 
+0100
@@ -718,10 +718,15 @@
 
   g_return_val_if_fail (G_IS_SIGNAL_GROUP (self), FALSE);
   g_return_val_if_fail (detailed_signal != NULL, FALSE);
-  g_return_val_if_fail (g_signal_parse_name (detailed_signal, 
self->target_type,
-                                             &signal_id, &signal_detail, TRUE) 
!= 0, FALSE);
   g_return_val_if_fail (closure != NULL, FALSE);
 
+  if (!g_signal_parse_name (detailed_signal, self->target_type,
+                            &signal_id, &signal_detail, TRUE))
+    {
+      g_critical ("Invalid signal name “%s”", detailed_signal);
+      return FALSE;
+    }
+
   g_rec_mutex_lock (&self->mutex);
 
   if (self->has_bound_at_least_once)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/gobject/tests/signalgroup.c 
new/glib-2.78.3/gobject/tests/signalgroup.c
--- old/glib-2.78.1/gobject/tests/signalgroup.c 2023-10-25 13:33:59.000000000 
+0200
+++ new/glib-2.78.3/gobject/tests/signalgroup.c 2023-12-06 19:03:55.000000000 
+0100
@@ -305,7 +305,7 @@
 
   /* Invalid Signal Name */
   g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
-                         "*g_signal_parse_name*");
+                         "*Invalid signal name “does-not-exist”*");
   group = g_signal_group_new (signal_target_get_type ());
   g_signal_group_connect (group,
                           "does-not-exist",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/meson.build new/glib-2.78.3/meson.build
--- old/glib-2.78.1/meson.build 2023-10-25 13:33:59.000000000 +0200
+++ new/glib-2.78.3/meson.build 2023-12-06 19:03:55.000000000 +0100
@@ -1,5 +1,5 @@
 project('glib', 'c',
-  version : '2.78.1',
+  version : '2.78.3',
   # NOTE: See the policy in docs/meson-version.md before changing the Meson 
dependency
   meson_version : '>= 0.60.0',
   default_options : [
@@ -2436,6 +2436,10 @@
   enable_dtrace = true
 endif
 
+if cc.has_header_symbol('sys/ptrace.h', 'PTRACE_O_EXITKILL')
+  glib_conf.set('HAVE_PTRACE_O_EXITKILL', 1)
+endif
+
 # systemtap
 want_systemtap = get_option('systemtap')
 enable_systemtap = false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/glib-2.78.1/po/uk.po new/glib-2.78.3/po/uk.po
--- old/glib-2.78.1/po/uk.po    2023-10-25 13:33:59.000000000 +0200
+++ new/glib-2.78.3/po/uk.po    2023-12-06 19:03:55.000000000 +0100
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: glib\n"
 "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/glib/issues\n";
-"POT-Creation-Date: 2023-08-31 14:09+0000\n"
+"POT-Creation-Date: 2023-10-22 23:29+0000\n"
 "PO-Revision-Date: 2023-08-31 22:09+0300\n"
 "Last-Translator: Yuri Chornoivan <yurc...@ukr.net>\n"
 "Language-Team: Ukrainian <trans...@lists.fedoraproject.org>\n"
@@ -18,8 +18,8 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Lokalize 20.12.0\n"
 
 #: gio/gappinfo.c:339
@@ -318,8 +318,7 @@
 
 #: gio/gcharsetconverter.c:283 gio/gcharsetconverter.c:311
 msgid "Incomplete multibyte sequence in input"
-msgstr ""
-"Неправильна багатобайтова послідовність 
у перетворюваних вхідних даних"
+msgstr "Неправильна багатобайтова 
послідовність у перетворюваних вхідних 
даних"
 
 #: gio/gcharsetconverter.c:317 gio/gcharsetconverter.c:326
 msgid "Not enough space in destination"
@@ -480,8 +479,7 @@
 
 #: gio/gdbusaddress.c:653
 #, c-format
-msgid ""
-"Error in address “%s” — the noncefile attribute is missing or malformed"
+msgid "Error in address “%s” — the noncefile attribute is missing or 
malformed"
 msgstr ""
 "Помилка в адресі «%s» — атрибут не вказано 
атрибут noncefile або помилкове "
 "форматування атрибута"
@@ -519,8 +517,7 @@
 #: gio/gdbusaddress.c:1101
 #, c-format
 msgid "Cannot spawn a message bus when AT_SECURE is set"
-msgstr ""
-"Неможливо породити процес шини 
повідомлень, якщо встановлено AT_SECURE"
+msgstr "Неможливо породити процес шини 
повідомлень, якщо встановлено AT_SECURE"
 
 #: gio/gdbusaddress.c:1108
 msgid "Cannot spawn a message bus without a machine-id: "
@@ -601,8 +598,7 @@
 #, c-format
 msgid ""
 "Permissions on directory “%s” are malformed. Expected mode 0700, got 0%o"
-msgstr ""
-"Помилкові права на каталог «%s». 
Очікуваний режим — 0700, отримано 0%o"
+msgstr "Помилкові права на каталог «%s». 
Очікуваний режим — 0700, отримано 0%o"
 
 #: gio/gdbusauthmechanismsha1.c:355 gio/gdbusauthmechanismsha1.c:366
 #, c-format
@@ -614,8 +610,8 @@
 #: gio/gfile.c:1913 gio/gfile.c:1970 gio/gfile.c:2034 gio/gfile.c:2089
 #: gio/gfile.c:3949 gio/gfile.c:4088 gio/gfile.c:4500 gio/gfile.c:4970
 #: gio/gfile.c:5382 gio/gfile.c:5467 gio/gfile.c:5557 gio/gfile.c:5654
-#: gio/gfile.c:5741 gio/gfile.c:5842 gio/gfile.c:9000 gio/gfile.c:9090
-#: gio/gfile.c:9174 gio/win32/gwinhttpfile.c:453
+#: gio/gfile.c:5741 gio/gfile.c:5842 gio/gfile.c:8996 gio/gfile.c:9086
+#: gio/gfile.c:9170 gio/win32/gwinhttpfile.c:453
 msgid "Operation not supported"
 msgstr "Операція не підтримується"
 
@@ -785,34 +781,30 @@
 msgstr "НЕПРАВИЛЬНИЙ тип"
 
 #: gio/gdbusmessage.c:1324
-#| msgid "METHOD_CALL message: PATH or MEMBER header field is missing"
 msgid "METHOD_CALL message: PATH or MEMBER header field is missing or invalid"
 msgstr ""
-"Повідомлення METHOD_CALL: немає поля заголовка 
PATH або MEMBER або це поле є"
-" некоректним"
+"Повідомлення METHOD_CALL: немає поля заголовка 
PATH або MEMBER або це поле є "
+"некоректним"
 
 #: gio/gdbusmessage.c:1340
-#| msgid "METHOD_RETURN message: REPLY_SERIAL header field is missing"
 msgid "METHOD_RETURN message: REPLY_SERIAL header field is missing or invalid"
 msgstr ""
-"Повідомлення METHOD_RETURN: немає поля 
заголовка REPLY_SERIAL або це поле є"
-" некоректним"
+"Повідомлення METHOD_RETURN: немає поля 
заголовка REPLY_SERIAL або це поле є "
+"некоректним"
 
 #: gio/gdbusmessage.c:1360
-#| msgid "ERROR message: REPLY_SERIAL or ERROR_NAME header field is missing"
 msgid ""
 "ERROR message: REPLY_SERIAL or ERROR_NAME header field is missing or invalid"
 msgstr ""
-"Повідомлення ERROR: немає поля заголовка 
REPLY_SERIAL або ERROR_NAME або це"
-" поле є некоректним"
+"Повідомлення ERROR: немає поля заголовка 
REPLY_SERIAL або ERROR_NAME або це "
+"поле є некоректним"
 
 #: gio/gdbusmessage.c:1384
-#| msgid "SIGNAL message: PATH, INTERFACE or MEMBER header field is missing"
 msgid ""
 "SIGNAL message: PATH, INTERFACE or MEMBER header field is missing or invalid"
 msgstr ""
-"Повідомлення SIGNAL: немає поля заголовка PATH, 
INTERFACE або MEMBER або це"
-" поле є некоректним"
+"Повідомлення SIGNAL: немає поля заголовка PATH, 
INTERFACE або MEMBER або це "
+"поле є некоректним"
 
 #: gio/gdbusmessage.c:1392
 msgid ""
@@ -1067,8 +1059,7 @@
 #: gio/gdbusserver.c:1145
 #, c-format
 msgid "Cannot listen on unsupported transport “%s”"
-msgstr ""
-"Неможливо очікувати на дані на каналі 
передавання «%s», якого не існує"
+msgstr "Неможливо очікувати на дані на каналі 
передавання «%s», якого не існує"
 
 #: gio/gdbus-tool.c:113
 #, c-format
@@ -1150,8 +1141,7 @@
 #, c-format
 msgid ""
 "Warning: According to introspection data, interface “%s” does not exist\n"
-msgstr ""
-"Попередження: згідно з даними 
інтроспекції, інтерфейсу «%s» не існує\n"
+msgstr "Попередження: згідно з даними 
інтроспекції, інтерфейсу «%s» не існує\n"
 
 #: gio/gdbus-tool.c:533
 #, c-format
@@ -1520,7 +1510,7 @@
 msgid "Invalid symlink value given"
 msgstr "Неправильне значення символьного 
посилання"
 
-#: gio/gfile.c:4324 glib/gfileutils.c:2392
+#: gio/gfile.c:4324 glib/gfileutils.c:2424
 msgid "Symbolic links not supported"
 msgstr "Символічні посилання не 
підтримуються"
 
@@ -1533,16 +1523,16 @@
 msgid "File names cannot contain “%c”"
 msgstr "Назви файлів не можуть містити 
символу «%c»"
 
-#: gio/gfile.c:7155 gio/gfile.c:7281
+#: gio/gfile.c:7151 gio/gfile.c:7277
 #, c-format
 msgid "Failed to create a temporary directory for template “%s”: %s"
 msgstr "Не вдалося створити тимчасовий 
каталог для шаблону «%s»: %s"
 
-#: gio/gfile.c:7599 gio/gvolume.c:366
+#: gio/gfile.c:7595 gio/gvolume.c:366
 msgid "volume doesn’t implement mount"
 msgstr "для тому не реалізовано операцію 
монтування"
 
-#: gio/gfile.c:7713 gio/gfile.c:7790
+#: gio/gfile.c:7709 gio/gfile.c:7786
 msgid "No application is registered as handling this file"
 msgstr "Програм для обробки таких файлів не 
зареєстровано"
 
@@ -2755,8 +2745,7 @@
 #: gio/glib-compile-schemas.c:607
 #, c-format
 msgid "alias target “%s” is not in enumerated type"
-msgstr ""
-"призначення альтернативної назви «%s» не 
належить до нумерованого типу"
+msgstr "призначення альтернативної назви «%s» 
не належить до нумерованого типу"
 
 #: gio/glib-compile-schemas.c:608
 #, c-format
@@ -2789,8 +2778,7 @@
 #: gio/glib-compile-schemas.c:828
 #, c-format
 msgid "Invalid name “%s”: two successive hyphens (“--”) are not 
permitted"
-msgstr ""
-"Некоректна назва «%s»: не можна вказувати 
два дефіси одночасно («--»)."
+msgstr "Некоректна назва «%s»: не можна 
вказувати два дефіси одночасно («--»)."
 
 #: gio/glib-compile-schemas.c:837
 #, c-format
@@ -3342,25 +3330,25 @@
 msgid "Error setting modification or access time for file “%s”: %lu"
 msgstr "Помилка при встановленні часу зміни 
або доступу для файла «%s»: %lu"
 
-#: gio/glocalfileinfo.c:2950
+#: gio/glocalfileinfo.c:2970
 #, c-format
 msgid "Error setting modification or access time: %s"
 msgstr "Помилка при встановленні часу зміни 
або доступу: %s"
 
-#: gio/glocalfileinfo.c:2973
+#: gio/glocalfileinfo.c:2993
 msgid "SELinux context must be non-NULL"
 msgstr "Контекст SELinux не може значення NULL"
 
-#: gio/glocalfileinfo.c:2980
+#: gio/glocalfileinfo.c:3000
 msgid "SELinux is not enabled on this system"
 msgstr "SELinux не увімкнено у цій системі"
 
-#: gio/glocalfileinfo.c:2990
+#: gio/glocalfileinfo.c:3010
 #, c-format
 msgid "Error setting SELinux context: %s"
 msgstr "Помилка при встановленні контексту 
SELinux: %s"
 
-#: gio/glocalfileinfo.c:3087
+#: gio/glocalfileinfo.c:3107
 #, c-format
 msgid "Setting attribute %s not supported"
 msgstr "Підтримки встановлення атрибута %s не 
передбачено"
@@ -3988,7 +3976,7 @@
 msgstr "Сокет вже закритий"
 
 #: gio/gsocket.c:449 gio/gsocket.c:3238 gio/gsocket.c:4469 gio/gsocket.c:4527
-#: gio/gthreadedresolver.c:1438
+#: gio/gthreadedresolver.c:1445
 msgid "Socket I/O timed out"
 msgstr "Перевищено час очікування 
вводу-виводу сокета"
 
@@ -5117,7 +5105,7 @@
 msgid "Failed to read from file “%s”: %s"
 msgstr "Помилка зчитування з файла «%s»: %s"
 
-#: glib/gfileutils.c:920 glib/gfileutils.c:995 glib/gfileutils.c:1472
+#: glib/gfileutils.c:920 glib/gfileutils.c:995 glib/gfileutils.c:1502
 #, c-format
 msgid "Failed to open file “%s”: %s"
 msgstr "Не вдалося відкрити файл «%s»: %s"
@@ -5137,37 +5125,37 @@
 msgid "Failed to rename file “%s” to “%s”: g_rename() failed: %s"
 msgstr "Помилка перейменування файла «%s» на 
«%s»: помилка g_rename(): %s"
 
-#: glib/gfileutils.c:1179
+#: glib/gfileutils.c:1209
 #, c-format
 msgid "Failed to write file “%s”: write() failed: %s"
 msgstr "Не вдалося записати файл «%s»: збій у 
функції write(): %s"
 
-#: glib/gfileutils.c:1200
+#: glib/gfileutils.c:1230
 #, c-format
 msgid "Failed to write file “%s”: fsync() failed: %s"
 msgstr "Помилка запису у файл «%s»: помилка 
fsync(): %s"
 
-#: glib/gfileutils.c:1361 glib/gfileutils.c:1776
+#: glib/gfileutils.c:1391 glib/gfileutils.c:1808
 #, c-format
 msgid "Failed to create file “%s”: %s"
 msgstr "Помилка створення файла «%s»: %s"
 
-#: glib/gfileutils.c:1406
+#: glib/gfileutils.c:1436
 #, c-format
 msgid "Existing file “%s” could not be removed: g_unlink() failed: %s"
 msgstr "Не вдалося вилучити наявний файл «%s»: 
помилка g_unlink(): %s"
 
-#: glib/gfileutils.c:1741
+#: glib/gfileutils.c:1773
 #, c-format
 msgid "Template “%s” invalid, should not contain a “%s”"
 msgstr "Шаблон «%s» неправильний, бо не може 
містити «%s»"
 
-#: glib/gfileutils.c:1754
+#: glib/gfileutils.c:1786
 #, c-format
 msgid "Template “%s” doesn’t contain XXXXXX"
 msgstr "Шаблон «%s» не містить XXXXXX"
 
-#: glib/gfileutils.c:2348 glib/gfileutils.c:2377
+#: glib/gfileutils.c:2380 glib/gfileutils.c:2409
 #, c-format
 msgid "Failed to read the symbolic link “%s”: %s"
 msgstr "Помилка читання символічного 
посилання «%s»: %s"
@@ -5272,31 +5260,31 @@
 msgid "Key “%s” in group “%s” has value “%s” where %s was expected"
 msgstr "Значення ключа «%s» у групі «%s» 
дорівнює «%s», але очікувалося «%s»"
 
-#: glib/gkeyfile.c:4356
+#: glib/gkeyfile.c:4357
 msgid "Key file contains escape character at end of line"
 msgstr "Ключовий файл містить escape-символ 
наприкінці рядка"
 
-#: glib/gkeyfile.c:4378
+#: glib/gkeyfile.c:4394
 #, c-format
 msgid "Key file contains invalid escape sequence “%s”"
 msgstr "Файл ключа містить неправильну 
послідовність екранування «%s»"
 
-#: glib/gkeyfile.c:4530
+#: glib/gkeyfile.c:4545
 #, c-format
 msgid "Value “%s” cannot be interpreted as a number."
 msgstr "Не вдалося розібрати значення «%s» як 
число."
 
-#: glib/gkeyfile.c:4544
+#: glib/gkeyfile.c:4559
 #, c-format
 msgid "Integer value “%s” out of range"
 msgstr "Числове ціле значення «%s» поза межами 
діапазону"
 
-#: glib/gkeyfile.c:4577
+#: glib/gkeyfile.c:4592
 #, c-format
 msgid "Value “%s” cannot be interpreted as a float number."
 msgstr "Значення «%s» не вдалося перетворити 
на число з рухомою комою."
 
-#: glib/gkeyfile.c:4616
+#: glib/gkeyfile.c:4631
 #, c-format
 msgid "Value “%s” cannot be interpreted as a boolean."
 msgstr "Не вдалося обробити значення «%s» як 
логічне значення."
@@ -5474,8 +5462,7 @@
 
 #: glib/gmarkup.c:1813
 msgid "Document ended unexpectedly just after an open angle bracket “<”"
-msgstr ""
-"Документ раптово закінчився відразу 
після початкової кутової дужки «<»"
+msgstr "Документ раптово закінчився відразу 
після початкової кутової дужки «<»"
 
 #: glib/gmarkup.c:1821 glib/gmarkup.c:1866
 #, c-format
@@ -5531,8 +5518,7 @@
 
 #: glib/gmarkup.c:1886
 msgid "Document ended unexpectedly inside a comment or processing instruction"
-msgstr ""
-"Документ раптово закінчився у середині 
коментарю чи інструкції обробки"
+msgstr "Документ раптово закінчився у 
середині коментарю чи інструкції обробки"
 
 #: glib/goption.c:875
 msgid "[OPTION…]"
@@ -5632,8 +5618,7 @@
 #. should not happen in GRegex since we check modes before each match
 #: glib/gregex.c:514
 msgid "matching mode is requested that was not compiled for JIT"
-msgstr ""
-"надійшов запит щодо режиму відповідності, 
який не було зібрано для JIT"
+msgstr "надійшов запит щодо режиму 
відповідності, який не було зібрано для JIT"
 
 #: glib/gregex.c:535 glib/gregex.c:1851
 msgid "unknown error"
@@ -5957,57 +5942,57 @@
 msgid "Child process exited abnormally"
 msgstr "Дочірній процес аварійно закінчив 
роботу"
 
-#: glib/gspawn.c:2032 glib/gspawn-win32.c:472 glib/gspawn-win32.c:480
+#: glib/gspawn.c:2039 glib/gspawn-win32.c:472 glib/gspawn-win32.c:480
 #, c-format
 msgid "Failed to read from child pipe (%s)"
 msgstr "Помилка зчитування з дочірнього 
каналу (%s)"
 
-#: glib/gspawn.c:2404
+#: glib/gspawn.c:2411
 #, c-format
 msgid "Failed to spawn child process “%s” (%s)"
 msgstr "Не вдалося запустити дочірній процес 
«%s» (%s)"
 
-#: glib/gspawn.c:2530
+#: glib/gspawn.c:2537
 #, c-format
 msgid "Failed to fork (%s)"
 msgstr "Помилка створення процесу (%s)"
 
-#: glib/gspawn.c:2690 glib/gspawn-win32.c:503
+#: glib/gspawn.c:2697 glib/gspawn-win32.c:503
 #, c-format
 msgid "Failed to change to directory “%s” (%s)"
 msgstr "Не вдалося змінити каталог на «%s» (%s)"
 
-#: glib/gspawn.c:2700
+#: glib/gspawn.c:2707
 #, c-format
 msgid "Failed to execute child process “%s” (%s)"
 msgstr "Не вдалося виконати дочірній процес 
«%s» (%s)"
 
-#: glib/gspawn.c:2710
+#: glib/gspawn.c:2717
 #, c-format
 msgid "Failed to open file to remap file descriptor (%s)"
 msgstr "Не вдалося відкрити файл для зміни 
прив'язки дескриптора файла (%s)"
 
-#: glib/gspawn.c:2718
+#: glib/gspawn.c:2725
 #, c-format
 msgid "Failed to duplicate file descriptor for child process (%s)"
 msgstr "Не вдалося здублювати дескриптор 
файла для дочірнього процесу (%s)"
 
-#: glib/gspawn.c:2727
+#: glib/gspawn.c:2734
 #, c-format
 msgid "Failed to fork child process (%s)"
 msgstr "Помилка запуску дочірнього процесу (%s)"
 
-#: glib/gspawn.c:2735
+#: glib/gspawn.c:2742
 #, c-format
 msgid "Failed to close file descriptor for child process (%s)"
 msgstr "Не вдалося закрити дескриптор файла 
для дочірнього процесу (%s)"
 
-#: glib/gspawn.c:2743
+#: glib/gspawn.c:2750
 #, c-format
 msgid "Unknown error executing child process “%s”"
 msgstr "Невідома помилка виконання 
дочірнього процесу «%s»"
 
-#: glib/gspawn.c:2767
+#: glib/gspawn.c:2774
 #, c-format
 msgid "Failed to read enough data from child pid pipe (%s)"
 msgstr "Не вдалося зчитати достатню кількість 
даних з дочірнього каналу (%s)"
@@ -6159,7 +6144,7 @@
 #. Translators: A unit symbol for size formatting, showing for example: "13.0 
kB"
 #: glib/gutils.c:2966
 msgid "kB"
-msgstr "kB"
+msgstr "кБ"
 
 #. Translators: A unit symbol for size formatting, showing for example: "13.0 
MB"
 #: glib/gutils.c:2968
@@ -6229,7 +6214,7 @@
 #. Translators: A unit symbol for size formatting, showing for example: "13.0 
Gb"
 #: glib/gutils.c:2998
 msgid "Gb"
-msgstr "Gb"
+msgstr "Гб"
 
 #. Translators: A unit symbol for size formatting, showing for example: "13.0 
Tb"
 #: glib/gutils.c:3000

Reply via email to