Import Debian changes 2.72.4-0ubuntu2.2

glib2.0 (2.72.4-0ubuntu2.2) jammy-security; urgency=medium
.
  * SECURITY UPDATE: multiple GVariant security issues
    - debian/patches/gvariant-security-*.patch: backported upstream fixes
      for GVariant normalization issues.
    - CVE-2023-24593, CVE-2023-29499, CVE-2023-25180, CVE-2023-32611,
      CVE-2023-32636, CVE-2023-32643, CVE-2023-32665
.
glib2.0 (2.72.4-0ubuntu2) jammy; urgency=medium
.
  * d/p/0001-gio-Make-portal-support-aware-of-snaps.patch:
    - Make portal support aware of snaps (LP: #1998267)
.
glib2.0 (2.72.4-0ubuntu1) jammy; urgency=medium
.
  * New upstream release (LP: #1980408)
  * Update testfilemonitor-Skip-if-we-are-avoiding-flaky-tests.patch
    for new testfilemonitor test.
.
glib2.0 (2.72.1-1) unstable; urgency=medium
.
  [ Jeremy Bicha ]
  * New upstream release (LP: #1969115)
    - Includes workaround for meson #1008382
  * Add patch to recognize GNOME Console as a terminal app
  * Refresh patch
  * debian/libglib2.0-0.symbols: Add new symbol
.
  [ Johannes Schauer Marin Rodrigues ]
  * debian/libglib2.0-0.postinst.in: only run clean-up-unmanaged-libraries
    on upgrades and not on new installations
    (Closes: #1008096)
.
glib2.0 (2.72.0-1) unstable; urgency=medium
.
  * New upstream release
    - Fix assertion failure with time zone offsets >= 25 hours
      (Closes: #1007226)
    - Various unit test fixes
    - Fix a memory leak with an invalid format in g_vasprintf()
    - Translation updates
  * Merge 2.71.x release history from experimental
    - d/gbp.conf, d/control.in: Update branch for upload to unstable
  * Upload to unstable
.
glib2.0 (2.70.5-1) unstable; urgency=medium
.
  * New upstream release
    - Fix assertion failure with time zone offsets >= 25 hours
      (Closes: #1007226)
    - Fix possible buffer overflow in g_canonicalize_filename()
.
glib2.0 (2.70.4-1) unstable; urgency=medium
.
  * New upstream release
  * Adjust Lintian overrides for newer Lintian
.
glib2.0 (2.71.3-1) experimental; urgency=medium
.
  * New upstream development release
.
glib2.0 (2.71.2-1) experimental; urgency=medium
.
  * New upstream development release
  * Update symbols file.
    Ignore removal of g_debug_controller_dup_default, which was only added
    during this development cycle. GLib doesn't guarantee ABI stability
    within x.odd.z branches.
  * d/p/debian/tests-Skip-debugcontroller-test.patch:
    Add patch to skip another unreliable unit test while it's investigated
    upstream
.
glib2.0 (2.71.1-1) experimental; urgency=medium
.
  * New upstream development release
  * Merge packaging changes from unstable
    - Use debhelper 13 features instead of dh-exec
  * Update symbols file
.
glib2.0 (2.70.3-1) unstable; urgency=medium
.
  * New upstream release
    - Do not allow empty structs (tuples) in D-Bus messages, resolving a
      denial-of-service vulnerability for private GDBus servers that accept
      messages from untrusted clients (glib#2557)
    - Do not allow deep recursion in serialized GVariant binary data,
      resolving a denial of service for anything that loads untrusted
      GVariant binary data (glib#2572)
    - Fix file descriptor handling when launching subprocesses
    - Don't skip fsync when writing out files on btrfs.
      This was based on a kernel behaviour that was guaranteed prior to
      2014, but is no longer considered to be a guarantee.
    - Translation updates
  * Use debhelper 13 features instead of dh-exec
    debhelper now has ${DEB_HOST_MULTIARCH} substitutions, so we don't need
    to use dh-exec for those.
    After that, the one remaining dh-exec feature in use was a conditional
    installation for the FAM GIO module for Hurd. Open-code this in d/rules
    instead.
  * d/gbp.conf: Use upstream/2.70.x branch for packaging.
    We have already had a 2.71.x release.
.
glib2.0 (2.71.0-2) experimental; urgency=medium
.
  * Merge packaging updates from unstable
.
glib2.0 (2.70.2-1) unstable; urgency=medium
.
  * New upstream release
  * Build-Depend on dh-sequence-gnome and dh-sequence-python3
  * debian/rules: Drop environment variable clearing now done for us by dh13
.
glib2.0 (2.71.0-1) experimental; urgency=medium
.
  * New upstream development release
  * Unfuzz patch series
  * Update symbols file
.
glib2.0 (2.70.1-1) unstable; urgency=medium
.
  * New upstream release
    - Functionally equivalent to previous releases to Debian, except for
      Windows-specific changes
  * Drop patches that came from upstream
  * d/upstream/metadata: Add
  * Use debhelper compat level 13
    - Drop override for dh_missing --fail-missing, which is now the default
.
glib2.0 (2.70.0-3) unstable; urgency=medium
.
  * d/rules: Remove internal_pcre build option, which no longer exists.
    Meson 0.60.0 no longer tolerates this.
.
glib2.0 (2.70.0-2) unstable; urgency=medium
.
  * d/patches: Update to upstream glib-2-70 branch commit
    2.70.0-41-g359a837ee.
    Among other fixes, this makes sure we receive change-notification from
    NetworkManager (>= 1.31.5), which dropped its legacy PropertiesChanged
    signal in favour of using standard D-Bus Properties. (LP: #1946196)
  * Add Breaks on older versions of glib-networking-tests.
    With this GLib, the old way glib-networking's tests used to mock up
    a particular negotiated protocol no longer works.
  * Add Breaks on versions of gnome-keyring that had elevated capabilities.
    Security hardening in GLib 2.70.0 interferes with their ability to
    connect to D-Bus in some system configurations. (See #994961)
  * Remove vestigial triggers for /usr/lib/gio/modules.
    We no longer load files from that directory (since Debian 11 and Ubuntu
    20.04), but we still had a trigger for it, and the postinst still created
    a module cache if it existed.
  * d/libglib2.0-0.postinst.in: Clean up /usr/lib/gio/modules on upgrade.
    This directory would still exist if older versions of GLib created a
    cache there.
  * d/libglib2.0-0.postinst.in: Add comments indicating when other
    workarounds can be removed
  * Add Lintian override for a unit test depending on a private library
  * Skip memory-monitor-dbus test by default, and add extra debug info.
    Helps: #995178
.
glib2.0 (2.70.0-1) unstable; urgency=medium
.
  * New upstream release
  * d/rules: Make shared objects in installed-tests non-executable
  * Remove shebang from taptestrunner.py differently
    - Remove shebang from installed file using sed.
      This avoids missing the fact that there are two copies in the source,
      of which we only patched one.
    - d/p/debian/taptestrunner-Stop-looking-like-an-executable-script.patch:
      Drop, no longer necessary
  * Add Lintian override for #970275
  * d/copyright, d/libglib2.0-0.symbols: Update
  * d/gbp.conf: Switch upstream branch
  * Unfuzz patch series
  * Standards-Version: 4.6.0 (no changes required)
.
glib2.0 (2.68.4-1) unstable; urgency=medium
.
  * New upstream release
    - Avoid a deadlock while finalizing a GLocalFileMonitor
    - Correctly use 3 parameters for close_range(), fixing build with
      glibc 2.34
    - Fix global trash directory detection
    - Make g_string_replace() with empty search string behave sensibly
      (matching Python str.replace())
    - Translation updates: oc, zh_CN, zh_TW
  * tests: Specify charset for generated locales to fix FTBFS with new glibc.
    glibc 2.31-14 dropped support for all non-UTF-8 locales, so we can't
    use /usr/share/i18n/SUPPORTED to choose a suitable charset any more.
  * d/rules: Override dh_fixperms to set correct permissions on /usr/libexec.
    Making everything executable is not quite right for installed-tests.
.
glib2.0 (2.68.3-2) unstable; urgency=medium
.
  * Merge from experimental branch
  * Changes relative to 2.68.3-1 in experimental:
    - d/watch: Only watch for stable (2.even.z) releases
    - d/p/debian/61_glib-compile-binaries-path.patch: Remove.
      This patch turns out to be unnecessary, and is harmful for
      cross-compiling. Thanks to Helmut Grohne (Closes: #982213)
  * Changes relative to previous version in unstable:
    - New upstream stable release branch 2.68.x
    - Fix maintainer scripts' handling of /usr/lib/MULTIARCH/gio/modules
      (Closes: #987913, see 2.68.1-2 changelog)
    - Mark dbus as <!nocheck> <!noinsttest>.
      Several of the installed-tests won't be built unless dbus-daemon is
      available, so <!nocheck> is insufficient.
    - Move test-dependencies to Build-Depends-Arch.
      We don't run the majority of the tests when we're only building the
      documentation.
    - Remove an unused Lintian override
    - Add more Lintian overrides for test data
    - Use d/tests/run-with-locales for better locale-sensitive test coverage
  * d/rules: Fix dead link when documenting why we use -Wl,--no-as-needed
  * Bump minimum GLib version for callers of g_dbus_server_new_sync()
    Programs that call this function might be passing in the new flag
    G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER, which is
    security-significant. Don't allow such programs to be built against
    GLib 2.68 and run with GLib 2.66 or older.
  * Add Breaks on libsoup2.4-tests before 2.72.0-3.
    Older versions of the libsoup test suite had an assertion that would
    only succeed because of a GLib bug, which is fixed in 2.68.x. Newer
    versions tolerate the bug, but do not require it.
.
glib2.0 (2.68.3-1) experimental; urgency=medium
.
  * New upstream release 2.68.3, fixing bugs:
    - GFile: `g_file_replace_contents()` reports `G_IO_ERROR_WRONG_ETAG` when
      saving from a symlink
    - glocalfileoutputstream: Fix ETag check when replacing through a symlink
    - gmacros: check that __cplusplus or _MSC_VER is defined
    - gmacros: missing check if __STDC_VERSION__ is defined
    - gthreadedresolver: don't ignore flags in lookup_by_name_with_flags
    - inotify: Fix a memory leak
    - json-glib does not build with glib 2.68.1
    - testfilemonitor test leaks ip_watched_file_t struct
    - tlscertificate: Avoid possible invalid read
.
glib2.0 (2.68.1-2) experimental; urgency=medium
.
  * Fix maintainer scripts' handling of /usr/lib/MULTIARCH/gio/modules:
    - postrm: Only delete GIO module cache on remove or purge.
      Despite its name, the postrm can be invoked for reasons other than
      package removal: in particular, the old version's postrm is run
      during upgrades.
    - postinst: Recreate GIO module directory if deleted by an older
      postrm, to recover from the bug fixed here.
    - postinst: Don't guard glib-compile-schemas or gio-querymodules with
      a check for existence of a directory that is shipped in the .deb.
      If such a directory has somehow gone missing, we want to see
      a warning. This won't make the postinst fail, because we're ignoring
      exit status anyway.
    (Closes: #987913)
.
glib2.0 (2.68.1-1) experimental; urgency=medium
.
  * New upstream stable release
  * d/tests/run-with-locales: Avoid FTBFS with locales-all installed
.
glib2.0 (2.68.0-1) experimental; urgency=medium
.
  * New upstream stable release
    - Drop dead code from glib-compile-schemas
    - Improve valgrind suppressions
    - Fix error in g_bytes_icon_new() documentation
    - Avoid close(-1) during error handling
    - Fix copy/paste error in queue test
    - Translation updates
  * Add CVE ID references to previous changelog entries.
    CVE IDs were not yet available at the time these vulnerabilities were
    initially fixed.
.
glib2.0 (2.67.6-1) experimental; urgency=medium
.
  * New upstream release
    - This fixes a symlink attack affecting file-roller.
      When g_file_replace() is used with G_FILE_CREATE_REPLACE_DESTINATION
      to replace a path that is a dangling symlink, previously it would
      have also created the target of the symlink as an empty file, which
      could conceivably be security-sensitive if the symlink is
      attacker-controlled. (Closes: #984969; CVE-2021-28153)
  * Revert test-dependency on libc6-dev, which should no longer be
    necessary with the new upstream release.
.
glib2.0 (2.67.5-2) experimental; urgency=medium
.
  * debian/tests/control: Test-Depend on libc6-dev; the `pollable` test
    requires it.  See [upstream MR !1977][0]. The upstream tests now rely on
    finding "libutil.so", which is in libc6-dev. Once that MR, or something
    like it, is merged, we can remove this test-dep as the runtime library
    will be being used.
    [0]: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1977
.
glib2.0 (2.67.5-1) experimental; urgency=medium
.
  * New upstream release
    + Fix more issues with `glib_typeof` macro from 2.67.3–2.67.4 (LP:
      #1916705)
    + Fix regression with some FD mappings passed to
      `g_subprocess_launcher_spawnv()` (Closes: #983026) (LP: #1916701)
  * debian/watch: Fix to not match `..`. The watch file was matching the
    "Parent directory/" link and considering that the highest, since its
    target is `..`. Expect 1+ digits to begin the version number.
.
glib2.0 (2.67.4-1) experimental; urgency=medium
.
  * New upstream release
    - Among other changes, this should fix FTBFS on armel
  * d/libglib2.0-0.symbols: Add g_spawn_async_with_pipes_and_fds
.
glib2.0 (2.67.3+git20210214-1) experimental; urgency=medium
.
  * d/changelog: Add bug reference for GHSL-2021-045 to previous entry
  * New upstream git snapshot; among other changes:
    - Fix regressions caused by the GHSL-2021-045 fixes in 2.67.3
    - Warn and fail on integer overflow in g_byte_array_new_take()
      for arrays larger than G_MAXUINT
      (Closes: #982779; CVE-2021-27218)
  * d/libglib2.0-0.symbols: Add g_string_replace()
  * Refresh patch series
  * d/rules, d/tests: Generate various locales mentioned in the tests
  * Mark dbus as <!nocheck> <!noinsttest>.
    Several of the installed-tests won't be built unless dbus-daemon is
    available, so <!nocheck> is insufficient.
  * Move test-dependencies to Build-Depends-Arch.
    We don't run the majority of the tests when we're only building the
    documentation.
  * Remove an unused Lintian override
  * Add more Lintian overrides for test data
.
glib2.0 (2.67.3-1) experimental; urgency=medium
.
  * New upstream release
    - Fix various integer overflows, some of them potentially exploitable
      (Closes: #982778; CVE-2021-27219, GHSL-2021-045)
  * Drop patches that came from upstream or were applied upstream
.
glib2.0 (2.67.2-1) experimental; urgency=medium
.
  * New upstream release
  * Refresh patch series
  * d/patches: Cherry-pick some fixes from upstream git master.
    This is mostly for parity with the update to 2.66.x that I'm preparing
    for unstable, which also includes the XDG_CURRENT_DESKTOP fixes.
  * d/p/spawn-Don-t-set-a-search-path-if-we-don-t-want-to-search-.patch:
    Make the g_spawn family only search PATH if G_SPAWN_SEARCH_PATH is used.
    Previously, they would sometimes search /usr/bin:/bin:. for an
    executable they should have only loaded from the current working
    directory. In particular, this made gtk+3.0 fail its build-time tests
    if ImageMagick display(1) happened to be installed. (Closes: #977961)
.
glib2.0 (2.67.1-1) experimental; urgency=medium
.
  * Branch for experimental and 2.67.x
  * New upstream development release
  * Temporarily use git to fetch upstream release.
    The official tarball release doesn't seem to have made it onto mirrors.
  * d/rules: Explicitly enable libelf dependency for gresource tool
  * d/p/Handle-the-case-of-g_object_run_dispose-in-GBinding.patch:
    Add patch from upstream to fix a regression in GBinding that caused
    gnome-terminal-server to crash on startup
.
glib2.0 (2.66.8-1) unstable; urgency=medium
.
  * d/watch: Only watch for 2.66.x versions.
    2.68.0 has been released but will not be in bullseye.
  * New upstream release
    - Functionally equivalent to 2.66.7-2, except for the version number
      and a change to Windows-specific code that is not used in Debian
  * Drop patches that were included in the new upstream release
  * d/p/glocalfileoutputstream-Tidy-up-error-handling.patch:
    Add patch from upstream to clean up error handling.
    After the fix for #984969, this function could end up calling close(-1),
    which is harmless but gets flagged as an error by static analysis and
    by error-checking instrumentation. Fixing this will prevent it from
    obscuring real errors.
  * Add CVE references in recent changelog entries.
    CVE IDs for the vulnerabilities were not available at the time they were
    fixed, but now they are.
.
glib2.0 (2.66.7-2) unstable; urgency=medium
.
  * d/changelog: Add bug numbers for integer overflows in previous versions
  * Add patches to fix a symlink attack affecting file-roller.
    When g_file_replace() is used with G_FILE_CREATE_REPLACE_DESTINATION to
    replace a path that is a dangling symlink, previously it would have also
    created the target of the symlink as an empty file, which could
    conceivably be security-sensitive if the symlink is attacker-controlled.
    (Closes: #984969; CVE-2021-28153)
.
glib2.0 (2.66.7-1) unstable; urgency=high
.
  * New upstream release
    - Fix another regression caused by the GHSL-2021-045 fixes in 2.66.6
    - Warn and fail on integer overflow in g_byte_array_new_take()
      for arrays larger than G_MAXUINT
      (Closes: #982779; CVE-2021-27218)
    - Disallow using currently-undefined D-Bus connection or server flags,
      to prevent forward-compatibility problems with new security-sensitive
      flags that are likely to be introduced in GLib 2.68
  * Drop previous patches for GHSL-2021-045 regressions, applied upstream
.
glib2.0 (2.66.6-2) unstable; urgency=high
.
  * d/patches: Add proposed fixes for regressions in 2.66.6.
    Two functions that took either a positive length, or -1 to indicate
    strlen(), had assertions with the wrong sense in 2.66.6, causing some
    valid uses of those functions to regress.
  * d/p/debian/61_glib-compile-binaries-path.patch: Remove.
    This patch turns out to be unnecessary, and is harmful for
    cross-compiling. Thanks to Helmut Grohne (Closes: #982213)
  * Set high urgency to get the regression fixes into bullseye
.
glib2.0 (2.66.6-1) unstable; urgency=high
.
  * New upstream release
    - Fix various integer overflows, some of them potentially exploitable
      (Closes: #982778; CVE-2021-27219, GHSL-2021-045)
.
glib2.0 (2.66.5-1) unstable; urgency=medium
.
  * New upstream release, equivalent to 2.66.4-27-g0051c0635
  * Drop patches that were applied upstream
.
glib2.0 (2.66.4-4) unstable; urgency=medium
.
  * d/patches: Update patch series to upstream commit 2.66.4-27-g0051c0635
    - Improve test coverage for #977961
    - Stop valgrind reporting memory leaks in GSpawn in most cases
    - Partially revert security hardening from 2.66.4-2: allow
      DBUS_SESSION_BUS_ADDRESS to be taken from the environment by
      setcap executables (to avoid regressing gnome-keyring) and by
      setgid executables (to avoid regressing msmtp).
      (Closes: #981420, #981555)
      Note that this is likely to be reverted in GLib 2.70.x to provide
      better hardening. The D-Bus session bus is not designed to be used
      by processes that have elevated privileges.
.
glib2.0 (2.66.4-3) unstable; urgency=medium
.
  * Improve patch for #977961, and add basic test coverage
.
glib2.0 (2.66.4-2) unstable; urgency=medium
.
  * d/patches: Update patch series to upstream commit 2.66.4-18-g872181c4f
    (excluding Windows-specific changes)
    - Security hardening: in GIO, ignore various environment variables
      if GIO is (inadvisably) used in a setuid process without sanitizing
      the environment first, similar to CVE-2012-3524
    - Reject very long date strings early, instead of spending time
      normalizing and parsing them
    - Fix recursion in GPrivate
  * d/p/spawn-Don-t-set-a-search-path-if-we-don-t-want-to-search-.patch:
    Make the g_spawn family only search PATH if G_SPAWN_SEARCH_PATH is used.
    Previously, they would sometimes search /usr/bin:/bin:. for an
    executable they should have only loaded from the current working
    directory. In particular, this made gtk+3.0 fail its build-time tests
    if ImageMagick display(1) happened to be installed. (Closes: #977961)
.
glib2.0 (2.66.4-1) unstable; urgency=medium
.
  * New upstream release
.
glib2.0 (2.66.3-2) unstable; urgency=medium
.
  * Apply packaging changes from experimental to unstable:
    - postinst: Clean up outdated copies of GLib if present, to avoid
      infrequent upgrade issues on non-merged-/usr systems.
      See #911225 and #949395 for more information.
      (Closes: #896019, #954960, #955331)
  * Add myself to Uploaders
  * Standards-Version: 4.5.1 (no changes required)
  * Swap Homepage field to something more GLib-specific
  * d/gbp.conf: Change upstream branch to upstream/2.66.x.
    2.67.0 was already released, so it's inaccurate to say that 2.66.x
    is the latest.
.
glib2.0 (2.66.3-1+exp1) experimental; urgency=medium
.
  * Merge from unstable
.
glib2.0 (2.66.3-1) unstable; urgency=medium
.
  * Team upload
  * New upstream release
    - Improve performance of processing files hidden via ./.hidden
    - All other changes were already included in 2.66.2-1
  * Drop patches that were cherry-picked from upstream
  * Stop reverting gtk-doc dependency version.
    We now have a suitable gtk-doc in Debian.
  * Drop a patch that was not applied upstream.
    This was hoped to be a workaround for intermittent test failures, but
    doesn't seem to have had the desired effect in practice.
  * Mark the DBUS_COOKIE_SHA1 parts of gdbus-server-auth test as flaky.
    This is not reliable enough to always pass on buildds, but is too
    intermittent to be able to reproduce the failure in a development
    environment, and DBUS_COOKIE_SHA1 is not an important enough feature
    to justify failing the build for this.
    As with other flaky tests, we still run this as an autopkgtest in an
    attempt to get more useful information, but we ignore failure.
.
glib2.0 (2.66.2-1+exp1) experimental; urgency=medium
.
  * Branch for experimental
  * postinst: Clean up outdated copies of GLib to avoid infrequent
    upgrade issues on non-merged-/usr systems
    (Closes: #896019, #954960, #955331)
.
glib2.0 (2.66.2-1) unstable; urgency=medium
.
  * Team upload
  * New upstream release
    - Add some missing (nullable) and (not nullable) annotations
  * Drop patches that were cherry-picked from upstream
  * Update patch series to upstream 2.66.2-9-g4daaf303a
    - Fix race in socketclient-slow test
    - Cope with sending fds in a D-Bus message that takes multiple writes
    - Don't skip updating polled fd sources
    - Add G_GNUC_PRINTF annotation to g_trace_mark()
  * d/p/glib-tests-fileutils-Make-more-use-of-g_assert_no_errno.patch,
    d/p/glib-tests-fileutils-Fix-expectations-when-running-as-roo.patch:
    Add proposed patch to fix a test failure when running as root
    (Closes: #973271)
  * d/rules: Remove migration path from legacy -dbg package.
    This was most recently shipped in Debian 9, and we don't support
    upgrades from anything older than Debian 10.
  * Drop obsolete workaround for #887629.
    We don't support upgrades from versions older than Debian 10, so we can
    drop workarounds that were only relevant for the upgrade from 9 to 10.
.
glib2.0 (2.66.1-2) unstable; urgency=medium
.
  * Cherry-pick patches from the glib-2-66 branch upstream
    - Fixes the regression called out in 2.66.1-1's changelog.
  * Add-a-test-for-the-6-days-until-EOM-bug.patch,
    Fix-the-6-days-until-the-end-of-the-month-bug.patch: Cherry-pick upstream
    mr!1705 to not break on timezones built with `zic -b slim`
.
glib2.0 (2.66.1-1) unstable; urgency=medium
.
  * Team upload
  * New upstream release
    - A performance problem where timezones were reloaded from disk
      every time a GTimeZone was created has been fixed (upstream issue
      #2204), but this means that changes to /etc/localtime will not take
      effect until a process restarts. Future changes in a subsequent
      2.66.x release will improve this.
    - Security fix for incorrect scope/zone ID parsing in URIs
    - Fix invalid Pointer Arithmetic in g_path_get_basename
    - Fix cookie lifetimes in GDBus DBUS_COOKIE_SHA1 mechanism
    - Fix faulty logic in DNS TXT record parsing
    - trash portal: Handle portal failures
    - gio-tool-trash: Prevent recursion to speed up emptying trash
    - glist: Clarify that g_list_free() and friends only free an entire list
    - gdatetime: Avoid integer overflow creating dates too far in the past
    - Translation updates
  * d/p/glocalfile-Never-require-G_LOCAL_FILE_STAT_FIELD_ATIME.patch,
    d/p/gdbusauthmechanismsha1-Use-the-same-timeouts-as-libdbus.patch:
    Drop patches that were applied upstream
.
glib2.0 (2.66.0-2) unstable; urgency=medium
.
  * Team upload
  * d/p/glocalfile-Never-require-G_LOCAL_FILE_STAT_FIELD_ATIME.patch:
    Add proposed patch to fix file copying on ZFS and CIFS (Closes: #970228)
  * d/p/gdbus-server-auth-Don-t-usually-test-non-EXTERNAL-repeate.patch:
    Add proposed patch to work around DBUS_COOKIE_SHA1 test failures
  * d/p/Revert-gtk-doc-dependency-to-1.32.patch: Move to debian subdirectory.
    This patch is not intended to go upstream.
.
glib2.0 (2.66.0-1) unstable; urgency=medium
.
  * Team upload
  * New upstream stable release
   - Fix missing tab in makefile rule
   - guri: Fix user passed to g_uri_split_with_user() not being NULL'd
   - Translation updates:
  * d/watch: Only watch for stable releases
  * d/p/gdbusauthmechanismsha1-Use-the-same-timeouts-as-libdbus.patch:
    Add patch to fix intermittent test failures on slower architectures.
    This narrowly missed the upstream code freeze, and should be in 2.66.1.
.
glib2.0 (2.65.3-1) experimental; urgency=medium
.
  * New upstream release
    + Fixes to the new `statx()` calls — note that since GLib 2.65.2 uses
      `statx()` (if available) instead of
      `stat()`/`fstat()`/`lstat()`/`fstatat()`, syscall sandboxing for third
      party applications might need to be updated
    + Also includes "Fix splice behavior on cancellation", a fix for a bug
      which was affecting tracker - particularly its autopkgtests.
.
glib2.0 (2.65.2-1) experimental; urgency=medium
.
  * Team upload
  * New upstream development release
  * d/rules: Run gtk-doc checks, even if building indep-only.
    Previously we would only run the gtk-doc checks if building
    architecture-dependent and -independent packages in the same build,
    which is done on Ubuntu amd64 buildds, but not on any Debian buildds.
  * Reduce dependency to the version of gtk-doc-tools from unstable.
    Instead of being some random snapshot from upstream git, this is the
    last release plus some selected patches. In particular, it has enough
    fixes to make the gtk-doc tests pass (Closes: #968975).
  * d/libglib2.0-tests.lintian-overrides: Update
.
glib2.0 (2.65.1-1) experimental; urgency=medium
.
  [ Sebastien Bacher ]
  * debian/control.in:
    - let libglib2.0-tests Depends on libglib2.0-0 (= ${binary:Version}),
      otherwise we can end up with failures due to out of sync versions
.
  [ Simon McVittie ]
  * d/shlibs.local: Upgrade all binary packages in lockstep.
    Like many projects where one source package builds multiple binary
    packages, GLib has private headers that share non-public interfaces
    between its binary packages. Instead of setting this up for individual
    binary packages, we can tell dpkg-shlibdeps to generate lockstep
    dependencies whenever one of our binary packages depends on our shared
    libraries.
  * d/watch, d/control.in, d/gbp.conf: Branch for experimental
  * New upstream development release
    - Require the experimental version of gtk-doc-tools.
      GLib 2.65.x requires a version that hasn't been released yet.
    - Update symbols file
    - Drop patches that were applied upstream
.
glib2.0 (2.64.4-1) unstable; urgency=medium
.
  * Team upload
  * New upstream release
    - Improve async-signal-safety
  * d/tests/build: Don't exercise static linking for GIO.
    libmount will no longer support being linked statically from 2.35.2-8
    onwards. For now I'm continuing to test that the other libraries can
    still be statically linked, but please consider them to be "at risk".
    (Closes: #963933)
  * Re-enable libmount support.
    libmount no longer depends on libcryptsetup, avoiding the various
    crashes that we are working around. Future versions will dlopen it
    on-demand, which should also avoid those crashes. Bump the
    build-dependency to a suitable version.
  * d/p/tests-Use-g_assert_-in-cancellable-test-rather-than-g_ass.patch,
    d/p/gcancellable-Fix-minor-race-between-GCancellable-and-GCan.patch:
    Split combined d/p/git_gsource_segfault.patch into its two component
    upstream commits, and add metadata
  * d/p/glib-compile-resources-Fix-exporting-on-Visual-Studio.patch,
    d/p/gdesktopappinfo-Fix-unnecessarily-copied-and-leaked-URI-l.patch:
    Add post-release bugfixes from upstream
.
glib2.0 (2.64.3-2) unstable; urgency=medium
.
  * Team upload
  * Temporarily disable libmount support.
    Recent Debian revisions of libmount pull in libcryptsetup as a
    dependency, for dm-verity support. libcryptsetup depends on json-c
    and OpenSSL, causing crashes due to symbol conflicts with other
    JSON libraries (jansson and json-glib, for example in firewalld and
    virt-manager) and with statically-linked copies of OpenSSL (for
    example in Steam and Minecraft). Until this is resolved in some
    other way, disable libmount and parse /etc/fstab and /proc/mounts
    ourselves, as we do in libglib2.0-udeb.
    Mitigates: #963933, #963932, #963525, #963721
.
glib2.0 (2.64.3-1) unstable; urgency=medium
.
  * Team upload
.
  [ Laurent Bigonville ]
  * Drop the libgio-fam package, and install the fam GIO plugin in
    libglib2.0-0 on Hurd ports. See: #885011 (Closes: #875915)
  * Stop building the libgio-fam package on kFreeBSD ports.
    It is no longer necessary now that gkqueuefilemonitor is available.
.
  [ Simon McVittie ]
  * Clarify changelog entry regarding Hurd and kFreeBSD
  * New upstream stable release
.
glib2.0 (2.64.2-1) unstable; urgency=medium
.
  [ Simon McVittie ]
  * Add Breaks on older versions of gimp, which used a syntactically
    invalid property name in a plugin, and would crash when GObject
    rejects syntactically invalid property names
.
  [ Sebastien Bacher ]
  * New upstream release
  * debian/patches/git_gsource_segfault.patch:
    - backport an upstream git change to fix a signal handler disconnect
      segfault situation (lp: #1872153)
.
glib2.0 (2.64.1-1) unstable; urgency=medium
.
  * Team upload
  * New upstream stable release
  * d/p/tests-Skip-MemoryMonitor-test-if-GObject-Introspection-is.patch:
    Drop patch, applied upstream
  * Add Breaks on glib-networking-tests older than 2.63.2.
    Those versions had a test that relied on TLS version fallback
    behaviour that has now been removed. (Closes: #953766)
.
glib2.0 (2.64.0-2) unstable; urgency=medium
.
  * Team upload
  * Merge packaging changes from unstable with new upstream release from
    experimental
  * d/control.in: Add Breaks on libgladeui-2-6 before 3.22.2.
    Older versions used a syntactically invalid property name
    "support warning", which GObject used to canonicalize to
    "support-warning". GLib 2.64 made this check more strict (see #953010).
.
glib2.0 (2.64.0-1) experimental; urgency=medium
.
  * Team upload
  * New upstream release
    - Fixes a vulnerability where GSocketClient sometimes forgot to use
      a configured proxy (CVE-2020-6750, Closes: #948554)
    - Stop installing gio-launch-desktop, which no longer exists
    - d/p/docs-Don-t-install-object-manager-example-separately.patch:
      Drop, applied upstream
  * d/p/debian/testfilemonitor-Skip-if-we-are-avoiding-flaky-tests.patch:
    Treat testfilemonitor as a flaky test
  * Standards-Version: 4.5.0 (no changes required)
  * New upstream release
  * d/p/tests-Skip-MemoryMonitor-test-if-GObject-Introspection-is.patch:
    Skip MemoryMonitor test if GObject-Introspection is too old to know it
  * Install a shell script implementation of the old gio-launch-desktop
    executable. While not required for *this* GLib, it is required by
    old processes that already had the old GLib (2.57.2 to 2.63.5) in
    memory before the upgrade. This can be removed after Ubuntu 20.04
    and Debian 11 are both released.
.
glib2.0 (2.63.5-2) experimental; urgency=medium
.
  * Skip-unreliable-gdbus-threading-tests--by-default.patch: Skip all of
    gdbus-threading test_method_calls_in_thread() has become (more?)
    unreliable too. When skipped, the test bus doesn't get torn down properly
    - it times out. Let's stop running these tests for now, until they are
    made reliable.
.
glib2.0 (2.63.5-1) experimental; urgency=medium
.
  [ Iain Lane ]
  * New upstream release
.
  [ Philip Withnall ]
  * Rework 01_gettext-desktopfiles.patch to not add new public API.
    Downstreams should not be adding new public API to GLib. From some code
    searching, this doesn’t appear to be used in more than one or two places,
    so won’t be too inconvenient to drop.  The original patch should either be
    upstreamed (I’d be open to some form of it, if there’s still evidence it’s
    useful) or dropped. If it’s upstreamed, the new keys should be
    standardised.  The alternative to this was to document the added public
    API; its addition was causing the new gtk-doc tests in GLib to fail.
  * Bump gtk-doc-tools dependency to >= 1.32-4 as GLib requires some fixes
    pushed to gtk-doc after its 1.32 release.
  * control: Bump Meson dependency to >= 0.52.0 for building the documentation
  * Drop PKCS#11 APIs added in 2.63.1 (not stable yet)
      - g_tls_certificate_new_from_pkcs11_uris()
  * Remove patches applied upstream:
    - tests-Skip-GMemoryMonitor-tests-if-the-dbusmock-template-.patch
    - tests-optional-portal.patch
  * d/p/docs-Don-t-install-object-manager-example-separately.patch: Add patch
    from upstream to disable incorrect installation of some example
    documentation
  * Rework libmount Meson argument as it’s now a feature; see !1344 upstream
.
glib2.0 (2.63.3-3) experimental; urgency=medium
.
  * debian/control.in:
    - lower the libglib2.0-tests Depends on xdg-desktop-portal to a
      Recommends since the portal is not available on some architectures
  * debian/patches/tests-optional-portal.patch:
    - skip the new memory monitor tests if the portal is not available,
      that allows the tests to be still successful on architectures were
      the portal is not available (e.g Ubuntu/i386)
.
glib2.0 (2.63.3-2) experimental; urgency=medium
.
  * debian/control.in:
    - libglib2.0-tests Depends on xdg-desktop-portal, it's required by the
      new low memory tests (and got enabled by the new python-dbusmock)
.
glib2.0 (2.63.3-1) experimental; urgency=medium
.
  [ Iain Lane ]
  * New upstream release
    + Add a `--glib-min-version` argument to `gdbus-codegen` which controls
      breaks in the API of generated code
    + Add `g_clear_list()` API to clear `GList`s to `NULL`
    + Add a `GMemoryMonitor` API to be notified of memory pressure situations
      using the low-memory-monitor project
    + Add support for dispose functions for `GSource` implementations
    + Tighten up validation of GObject signal and property names, allowing
      performance improvements
  * debian/tests/build: Style fixes, thanks to shellcheck.
  * d/p/d/Disable-some-tests-on-slow-architectures-which-keep-faili.patch:
    Rebase. Upstream have disabled these tests by default too (unless slow
    mode is enabled), so we don't need to add a patch to do a similar thing.
  * debian/libglib2.0-0.symbols: New symbols for 2.63.3
  * d/p/tests-Skip-GMemoryMonitor-tests-if-the-dbusmock-template-.patch: Add.
    We don't have a new enough dbusmock in Debian at the minute (one is not
    released yet). Skip the test if the required template isn't available.
  * control: Add Depends for the new memory-monitor tests.
    There are new tests, written in python, for GMemoryMonitor. They require
    dbus-python, pygobject, and the GI bindings for GLib and GIO.
.
  [ Steve Langasek ]
  * debian/tests/build: Make cross-test friendly
    autopkgtest is soon to get a `-a ARCHITECTURE` switch, which will
    cross-test autopkgtests. This is to be detected by the presence of the
    `dpkg-architecture`-style family of variables being set in the
    environment.
    For build tests like `glib2.0`'s `build` test, this means that we should
    test "${DEB_HOST_ARCH}" and invoke the cross toolchain as necessary.
    (Closes: #946355)
.
glib2.0 (2.63.2-1) experimental; urgency=medium
.
  * Team upload
  * Merge packaging changes from unstable
    - Support for pkg.glib2.0.noinsttest build profile
  * d/control.in: Refer to debian/experimental branch.
    This avoids false-positive warnings from vcswatch.
  * New upstream release
    - Drop patches that were applied upstream
  * Rename pkg.glib2.0.noinsttest build profile to noinsttest.
    This is now registered on <https://wiki.debian.org/BuildProfileSpec>.
  * Update symbols file
.
glib2.0 (2.63.1-2) experimental; urgency=medium
.
  * d/p/Revert-glocalfileinfo-Only-return-file-mode-not-type-as-U.patch:
    Revert "glocalfileinfo: Only return file mode, not type, as UNIX_MODE
    attribute" This reverts commit bfdc5fc4fc84ef8518d2d1a328c8482cf5a38e98.
    This commit changes the semantics of the `unix::mode` attribute, which
    some things (the one we've noticed is ostree) rely on.
  * d/p/test_copy_preserve_mode-Adjust-for-revert-semantics.patch:
    test_copy_preserve_mode: Adjust for revert semantics. Now we're returning
    the file type again, we need to mask it out to compare with the mode.
.
glib2.0 (2.63.1-1) experimental; urgency=medium
.
  * New upstream release
    - Add `g_array_steal()`, `g_ptr_array_steal()` and `g_byte_array_steal()`
      APIs
    - Add `g_get_os_info()` API
    - Add `GMainContextPusher` API
    - Add `g_warning_once()` API
    - Allow passing empty `GValue`s to `g_param_value_set_default()`
    - Always resolve `localhost` to loopback address in `GResolver`
    - Escape header guards generated by `gdbus-codegen` better
    - Fix crash in `g_spawn()` with high FD numbers due to use of `select()`
      rather than `poll()`
    - Limit recursion in `g_variant_parse()`
    - Several usability improvements to command line `gio` tool
  * debian/libglib2.0-0.symbols: Add new symbols for this release
  * debian/patches/*:
    - Drop backports we had which are in this release.
    - Update to upstream master at cc1b53f74. There are several test fixes
      that we might as well grab now.
.
glib2.0 (2.62.5-1) unstable; urgency=medium
.
  * Team upload
  * New upstream release
    - Fixes a vulnerability where GSocketClient sometimes forgot to use
      a configured proxy (CVE-2020-6750, Closes: #948554)
  * Build-depend on libnss-myhostname | netbase if running tests.
    This is an attempt to work around localhost not being a resolvable
    name in some build environments, notably reproducible-builds.
    (See #948834)
  * Put the result of `getent ahosts localhost` and
    `getent ahosts $(hostname)` in the build log, to check whether those
    names are resolvable in the build environment.
  * d/p/debian/testfilemonitor-Skip-if-we-are-avoiding-flaky-tests.patch:
    Treat testfilemonitor as a flaky test
  * Standards-Version: 4.5.0 (no changes required)
.
glib2.0 (2.62.4-2) unstable; urgency=medium
.
  * Team upload
  * Adjust dependencies to avoid broken partial upgrades on arm64 during
    libffi7 transition:
    - Bump versioned Depends on libffi-dev to get a guarantee that we'll
      depend on libffi7
    - Add Breaks on libgirepository-1.0-1 (<< 1.62.0-4~) so we cannot
      get a GObject built with libffi7 but a libgirepository built with
      libffi6
.
glib2.0 (2.62.4-1) unstable; urgency=medium
.
  * Team upload
.
  [ Steve Langasek ]
  * debian/tests/build: Make cross-test friendly (Closes: #946355)
.
  [ Iain Lane ]
  * debian/tests/build: Style fixes
.
  [ Simon McVittie ]
  * New upstream release
.
glib2.0 (2.62.3-2) unstable; urgency=medium
.
  * Team upload
  * Rename pkg.glib2.0.noinsttest build profile to noinsttest.
    This is now registered on <https://wiki.debian.org/BuildProfileSpec>.
.
glib2.0 (2.62.3-1) unstable; urgency=medium
.
  * Team upload
  * New upstream release
    - Drop patches that were applied upstream
  * Don't build libglib2.0-tests under pkg.glib2.0.noinsttest build profile.
    This is a prototype of the proposed standard build profile noinsttest.
    If the build profiles include both nocheck and pkg.glib2.0.noinsttest,
    we can drop the libdbus-1-dev build-dependency without harming test
    coverage or altering the contents of binary packages.
  * d/gbp.conf: Use upstream/2.62.x branch
.
glib2.0 (2.62.2-3) unstable; urgency=medium
.
  * Team upload
.
  [ Iain Lane ]
  * control: Drop `debian/experimental` from Vcs-*
.
  [ Simon McVittie ]
  * Build-depend on libdbus-1-dev for better test coverage
  * Update to upstream commit 2.62.2-28-g3cf25070e:
    - d/p/goption-Relax-assertion-to-avoid-being-broken-by-kdeinit5.patch:
      Fix assertion failure when called from a process that overwrites its
      argv, such as kdeinit5
    - d/p/gdbus-peer-Specifically-listen-on-127.0.0.1.patch:
      Improve reliability of gdbus-peer test in some container environments
    - d/p/gdbusserver-Delete-socket-and-nonce-file-when-stopping-se.patch,
      d/p/gdbusserver-Keep-a-strong-reference-to-the-server-in-call.patch,
      d/p/gdbusauthmechanismsha1-Remove-unnecessary-g_warning-calls.patch,
      d/p/gdbusauthmechanismsha1-Create-.dbus-keyrings-directory-re.patch,
      d/p/tests-Move-main-loop-and-test-GUID-into-test-functions-in.patch,
      d/p/tests-Isolate-directories-in-gdbus-peer-test.patch,
      d/p/gdbus-peer-test-Improve-diagnostics-if-g_rmdir-fails.patch,
      d/p/gdbus-peer-test-Stop-GDBusServer-before-tearing-down-temp.patch,
      d/p/gdbus-peer-test-Use-unix-dir-address-if-exact-format-does.patch,
      d/p/gdbus-server-auth-test-Create-temporary-directory-for-Uni.patch:
      Mark as applied upstream in 2.62.x branch
  * d/p/gdbus-server-auth-test-Include-gcredentialsprivate.h.patch:
    Apply patch from 2.63.x to fix missing coverage in test for #941018
  * d/p/Make-ld-executable-configurable.patch:
    Apply patch from 2.63.x to use cross ld where necessary
  * d/p/gdbus-server-auth-test-Create-temporary-directory-for-Uni.patch:
    Mark as applied upstream in 2.63.x branch
  * Improve patch metadata: use more URLs for bug references
.
glib2.0 (2.62.2-2) unstable; urgency=medium
.
  * Team upload
  * Update to upstream commit 2.62.2-14-gfcbb88823:
    - d/p/gdesktopappinfo-Allocate-DesktopFileDir-structs-dynamical.patch,
      d/p/gdesktopappinfo-Cancel-file-monitor-when-resetting-a-Desk.patch,
      d/p/glocalfilemonitor-Keep-a-weak-ref-to-the-monitor-in-GFile.patch:
      Fix intermittent test failures for GDesktopAppInfo (Closes: #941550)
    - d/p/gvariant-Limit-recursion-in-g_variant_parse.patch:
      Ensure that parsing a text-format GVariant does not run out of stack
      space
    - d/p/tests-Use-objcopy-from-the-cross-compilation-file-if-conf.patch,
      d/p/docs-Add-objcopy-to-example-cross-compilation-file.patch:
      Use the appropriate architecture's objcopy when cross-compiling
    - d/p/gtestutils-Add-additional-non-NULL-check-in-g_assert_cmpm.patch:
      Avoid false positive NULL dereference warnings in g_assert_cmpmem()
    - d/p/gspawn-Port-to-g_poll-from-select.patch:
      Fix launching subprocesses when a very large number of fds are open
    - d/p/gcredentialsprivate-Document-the-various-private-macros.patch,
      d/p/credentials-Invalid-Linux-struct-ucred-means-no-informati.patch,
      d/p/GDBus-prefer-getsockopt-style-credentials-passing-APIs.patch:
      Ensure libdbus clients can authenticate with a GDBusServer like the
      one in ibus (Closes: #941018)
  * d/p/gdbusserver-Delete-socket-and-nonce-file-when-stopping-se.patch,
    d/p/gdbusserver-Keep-a-strong-reference-to-the-server-in-call.patch,
    d/p/Add-a-test-for-GDBusServer-authentication.patch:
    Backport regression test for #941018 from upstream git master
  * d/p/gdbusauthmechanismsha1-Remove-unnecessary-g_warning-calls.patch,
    d/p/gdbusauthmechanismsha1-Create-.dbus-keyrings-directory-re.patch,
    d/p/tests-Move-main-loop-and-test-GUID-into-test-functions-in.patch,
    d/p/tests-Isolate-directories-in-gdbus-peer-test.patch:
    Backport reliability fixes for gdbus-peer test from upstream git master
  * d/p/gdbus-peer-test-Improve-diagnostics-if-g_rmdir-fails.patch,
    d/p/gdbus-peer-test-Stop-GDBusServer-before-tearing-down-temp.patch,
    d/p/gdbus-peer-test-Use-unix-dir-address-if-exact-format-does.patch,
    d/p/gdbus-server-auth-test-Create-temporary-directory-for-Uni.patch:
    Add some proposed patches to improve GDBus unit tests
  * d/p/debian/mimeapps-test-Mark-as-flaky.patch:
    Drop patch, hopefully no longer needed with #941550 fixed
  * d/p/debian/taptestrunner-Stop-looking-like-an-executable-script.patch:
    Make taptestrunner non-executable to avoid a Lintian warning
.
glib2.0 (2.62.2-1) unstable; urgency=medium
.
  * New upstream release
    + Fixes use after free when calling g_dbus_connection_flush_sync() in a
      dedicated thread (LP: #1848202)
.
glib2.0 (2.62.1-1) unstable; urgency=medium
.
  * Team upload
  * d/watch: Only watch for even-numbered (stable) releases
  * New upstream release
    - Fix regression that made G_FILE_COPY_TARGET_DEFAULT_PERMS result in
      private permissions rather than respecting umask (Closes: #505398)
    - d/p/g_file_info_get_modification_date_time-Calculate-in-integ.patch,
      d/p/Always-build-tests-if-we-enabled-installed-tests.patch:
      Drop patches that were applied upstream
  * d/p/debian/mimeapps-test-Mark-as-flaky.patch:
    Mark mimeapps test as flaky (see #941550)
.
glib2.0 (2.62.0-3) unstable; urgency=medium
.
  * Team upload
  * Merge packaging from 2.60.x branch previously in unstable
    - No changes since 2.62.0-2, except in d/changelog
    - d/p/debian/Disable-an-optimization-when-building-with-gcc-9.patch:
      Remove workaround for #931921, which turned out to be a clutter bug
  * d/p/Always-build-tests-if-we-enabled-installed-tests.patch:
    Add patch to fix installation of installed-tests in cross-builds
    (Closes: #941509)
  * d/p/g_file_info_get_modification_date_time-Calculate-in-integ.patch:
    Add patch to fix intermittent g-file-info test failures on i386
    (Closes: #941547)
  * libglib2.0-dev: Suggest libgirepository1.0-dev, for the GIR files
    (Closes: #914152)
  * d/gbp.conf: Use debian/master branch
  * Standards-Version: 4.4.1 (no changes required)
.
glib2.0 (2.60.6-2) unstable; urgency=medium
.
  * Team upload
  * d/rules: Edit debcrossgen output instead of using a modified version.
    This fixes use of CFLAGS, etc. during cross-compilation.
    (Closes: #933560)
  * Remove obsolete permissions fixing.
    Issue 1539 was fixed upstream.
  * d/p/debian/Disable-an-optimization-when-building-with-gcc-9.patch:
    Disable an optimization when building with gcc-9, instead of forcing
    gcc-8. This avoids depending on an old gcc, and should be easier to
    deal with for cross-compilation. (Workaround for #931921)
  * d/p/gmessages-Only-use-structured-logs-if-GLIB_VERSION_MAX_AL.patch:
    Update to upstream glib-2-60 branch at commit 2.60.6-2-ga365528f6
    - Don't use structured logging if GLIB_VERSION_MAX_ALLOWED < 2.56
.
glib2.0 (2.62.0-2) unstable; urgency=medium
.
  * Team upload.
  * Upload to unstable. (Closes: #940161)
.
glib2.0 (2.62.0-1) experimental; urgency=medium
.
  * New upstream release
    + Fix new `GFileInfo` APIs to work when
      `G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC` was not queried
.
glib2.0 (2.61.3-1) experimental; urgency=medium
.
  * New upstream release
  * d/p: Drop cherry-picks from upstream branch which we now have
  * d/p/d/Disable-an-optimization-when-building-with-gcc-9.patch: Drop,
    clutter has been fixed now (thanks Simon)
  * d/p/*: Refresh via gbp-pq as necessary
.
glib2.0 (2.61.2-2) experimental; urgency=medium
.
  * Team upload
  * d/p/cond-test-Don-t-make-assumptions-about-struct-sigaction-m.patch:
    Add proposed patch to fix FTBFS due to a test failure on mips*
.
glib2.0 (2.61.2-1) experimental; urgency=medium
.
  * Team upload
  * New upstream release
  * d/patches: Update to upstream git master, commit 2.61.2-23-g870b30bd7
    - Fix regression in g_mkdir_with_permissions()
    - Fix a memory leak
    - Update translations: es, id, ro
  * Merge changes from unstable
  * Refresh patch series
  * d/p/debian/06_thread_test_ignore_prctl_fail.patch:
    Use g_test_skip() when skipping test
  * d/p/GIO-tests-Don-t-do-clever-tricks-with-objcopy.patch:
    Drop workaround for #932287, and build-depend on fixed binutils on
    mips64el instead
  * d/rules: Edit debcrossgen output instead of using a modified version.
    This fixes use of CFLAGS, etc. during cross-compilation.
    (Closes: #933560)
  * d/libglib2.0-0.symbols: Update
  * Remove obsolete permissions fixing.
    Issue 1539 was fixed upstream.
  * libglib2.0-tests: Depend on libglib2.0-dev-bin.
    This is required for the new mkenums and genmarshal tests.
  * d/p/debian/Disable-an-optimization-when-building-with-gcc-9.patch:
    Disable an optimization when building with gcc-9, instead of forcing
    gcc-8. This avoids depending on an old gcc, and should be easier to
    deal with for cross-compilation. (Workaround for #931921)
.
glib2.0 (2.60.6-1) unstable; urgency=medium
.
  * Team upload
  * New upstream release, functionally equivalent to 2.60.5 with the
    patches we were already applying
    - d/p/portal-Add-a-getter-for-dconf-access.patch,
      d/p/settings-Tweak-priorities-for-keyfile-backend.patch,
      d/p/key-file-Handle-filename-being-NULL.patch:
      Drop, applied upstream
  * d/p/tests-Fix-data-race-in-gmenumodel-test.patch,
    d/p/tests-Fix-data-race-in-task-test.patch:
    Add patches from upstream git master to fix data races in tests.
    In particular, the one for gmenumodel might solve an unreproducible
    test failure on i386 (see #932678).
  * d/p/debian/gmenumodel-test-Mark-as-flaky.patch,
    d/p/debian/gvariant-test-Don-t-run-at-build-time-on-mips.patch:
    Skip more tests at build-time and during the non-flaky autopkgtest.
    The unreproducible gmenumodel test failure on i386 might in fact be
    fixed by d/p/tests-Fix-data-race-in-gmenumodel-test.patch, but it's
    hard to be sure about that. The gvariant fuzz test is catastrophically
    slow on certain mips CPUs and so is impractical to run there.
    (Closes: #932678)
  * Standards-Version: 4.4.0 (no changes required)
  * Use debhelper compat level 12
    - Stop explicitly passing -V to dh_makeshlibs, it is now the default
    - Disable dh_dwz for libglib2.0-udeb.
      This avoids an apparent debhelper bug in which dh_dwz generates
      multifiles for udebs, but dh_strip does not remove them from the
      udeb's staging directory. (Workaround for #933212)
  * Stop overriding libexecdir.
    Since FHS 3.0 (Policy 4.1.5), /usr/libexec is considered valid,
    and since debhelper compat level 12 it is the default.
    In this particular package this only affects the installed-tests.
  * Remove an obsolete Lintian override
.
glib2.0 (2.60.5-1) unstable; urgency=medium
.
  * Team upload
  * Prepare GLib 2.60.x stable branch for unstable
  * New upstream release
  * d/p/portal-Add-a-getter-for-dconf-access.patch,
    d/p/settings-Tweak-priorities-for-keyfile-backend.patch,
    d/p/key-file-Handle-filename-being-NULL.patch:
    Add post-release fixes from upstream glib-2-60 branch
  * d/p/GIO-tests-Don-t-do-clever-tricks-with-objcopy.patch:
    Don't do strange things with objcopy while testing GResource,
    while we work out what is going on in mips64el builds.
    Mitigates: #932287
.
glib2.0 (2.61.1-2) experimental; urgency=medium
.
  * control, rules: Build with gcc-8. See #931921 - when we're built with
    gcc-9, some applications that use GLib might start hanging.
.
glib2.0 (2.61.1-1) experimental; urgency=medium
.
  * New upstream release
    + `g_unichar_isxdigit()` and `g_unichar_xdigit_value()` now handle
       full-width characters (U+FF21–U+FF26 and U+FF41–U+FF46)
    + Deprecate `gtester` utility and its test reporting format and enable TAP
      output by default instead — the `--tap` option to tests is now a no-op
    + Add `g_test_summary()` to allow test authors to programmatically summarise
      what each unit test in a test suite does
    * Upgrade to Unicode Character Database v12.1
    + More IPv6 Happy Eyeballs fixes to `GNetworkAddress` and `GSocketClient`
    + Fix valgrind and gdb support for the new `GHashTable` changes
    + Fix GTask wait times growing faster than the number of task threads
    + Add `g_autoqueue()` helper macros, similar to `g_autolist()`
    + Add pre-allocated link helpers for `GList` and `GQueue`:
      - `g_list_insert_before_link()`
      - `g_queue_insert_before_link()`
      - `g_queue_insert_after_link()`
    + Improve network availability detection with NetworkManager to treat lower
      levels of connectivity as having reduced availability
    + Add `g_clear_signal_handler()` to allow disconnecting from a `GObject`
      signal and clearing the signal handler ID to zero in a single call
    + Add `g_autoptr()` support for `GRWLock`
  * 81-skip-monitor-test-on-non-linux.patch: Drop. This test was removed
    upstream.
  * debian/libglib2.0-0.symbols: Update
.
glib2.0 (2.60.4-1) experimental; urgency=medium
.
  * New upstream release (LP: #1832457)
  +  Fixes to improved network status detection with NetworkManager (#1788)
  + Leak fixes to some `glib-genmarshal` generated code
  + Further fixes to the Happy Eyeballs (RFC 8305) implementation
  + File system permissions fix to clamp down permissions in a small time window
    when copying files (CVE-2019-12450)
  + Bugs fixed:
   - Please revert #535 gmacros: Try to use the standard __func__ first in
     G_STRFUNC
  * gfile-Limit-access-to-files-when-copying.patch: Drop. It's in this version
    upstream.
  * d/p/*: Refresh through gbp pq
.
glib2.0 (2.60.3-2) experimental; urgency=medium
.
  * Team upload
  * d/p/gfile-Limit-access-to-files-when-copying.patch:
    Backport patch from upstream to ensure files don't temporarily have
    less restrictive permissions during copying
    (Closes: #929753, CVE-2019-12450)
  * Drop d/p/debian/04_homedir_env.patch:
    Remove legacy support for Debian-specific G_HOME environment variable.
    GLib has respected the HOME environment variable in the conventional
    way since wheezy. Only two packages (pygtk and ruby-graphviz) still
    set G_HOME without also setting HOME.
  * Drop d/p/debian/90_gio-modules-multiarch-compat.patch:
    Remove legacy support for loading modules from /usr/lib/gio/modules.
    All the known packages containing GIO modules (dconf, glib-networking
    and gvfs) migrated to /usr/lib/${DEB_HOST_MULTIARCH}/gio/modules
    before wheezy.
  * Register documentation in doc-base via symlinks in /usr/share/doc.
    The doc-base specification requires this, presumably for the benefit
    of tools that export /usr/share/doc via HTTP (see #925200), and
    Lintian 2.12 added a warning for not doing so.
.
glib2.0 (2.60.3-1) experimental; urgency=medium
.
  * New upstream releases 2.60.1 2.60.2 2.60.3, fixing many bugs:
    + build: Fix a typo in the test whether _NL_ABALTMON_n is supported
    + Critical in g_socket_client_async_connect_complete
    + Fix crash when displaying notifications on macOS (!786)
    + Fix documentation for `gdbus-tool wait` to use correct units
    + Fix typo in German translation
    + glib/date test fails
    + glib/gconstructor.h: Include stdlib.h for MSVC builds
    + GNetworkAddressAddressEnumerator unsafely modifies cache in
      GNetworkAddress
    + gnetworkaddress: Fix parallel enumerations interfering with eachother
    + gnetworkmonitornm: Fix network available detection
    + GResource generation test incompatible with stable LLVM on Linux
    + gschema.dtd: Add target attribute to alias
    + gsocketclient: Fix a leak in the connection code
    + Improve network status detection with NetworkManager
    + Leaks in gsocketclient.c connection code
    + test_month_names: assertion failed
    + tests: Update month name check for Greek locale
    + Update gdb pretty-printer for GHashTable
    + Various fixes to small key/value support in `GHashTable`
    + New GHashTable implementation confuses valgrind
    + more GHashTable fixes
    + GDB pretty-printer for GHashTable no longer works
    + ghash: Disable small-arrays under valgrind
.
glib2.0 (2.60.0-1) experimental; urgency=medium
.
  * New upstream release
    + Further fixes to the Happy Eyeballs (RFC 8305) implementation
    + Add support for the XDG trash portal
  * Call dh_python3 for all packages and add Depends to libglib2.0-tests.
    The tests now ship a "static-link.py" test. While it early-exits
    currently, we still need the right dependencies to be able to do that.
    Call dh_python3 for libglib2.0-test's private directory, and while we're
    here make sure that it is called for all packages too.
  * flaky autopkgtest: `closures` has been renamed to `closure-refcount`
  * Refresh and drop patches.
    - d/p/flaky-socket-service-test/*: Drop, applied upstream.
    - d/p/debian/closures-test-Skip-on-arm-unless-flaky-tests-are-allowed.patch:
      Refresh.
.
glib2.0 (2.59.3-2) experimental; urgency=medium
.
  [ Philip Withnall ]
  * debian: Drop GVariant alignment patches which are no longer needed.
    The upstream 2.59.0 release contained commit
    0f2a6c61c9c5e34d57293fb6987b21f3d1feb1cb, which automatically aligns
    GVariants at construction time. The realignment in the tests was a
    workaround for this.
    See upstream issue https://gitlab.gnome.org/GNOME/glib/issues/1342.
.
  [ Iain Lane ]
  * Cherry-pick fixes for upstream bug #1679 to fix a flaky test.
    This is apparently more flaky on the autopkgtest machines than elsewhere
    - it's quite consistently failing there.
.
glib2.0 (2.59.3-1) experimental; urgency=medium
.
  * New upstream release
    + Fix support for g_get_user_special_dir() on macOS, including support for
      the Downloads directory
    + Ensure that cancelling a GTask cannot cause its callback to be called
      synchronously (in the same call chain as the original *_async() call)
    + Further fixes to the Happy Eyeballs (RFC 8305) implementation
    + Various fixes for installation of installed tests
  * Refresh and drop patches.
    Drop gio-tests-Install-test1.overlay-file-when-building-instal.patch,
         tests-Install-the-slow-connect-preload.so-library-and-use.patch,
    fixed upstream.
.
glib2.0 (2.59.2-2) experimental; urgency=medium
.
  * Install `test1.overlay' file, which is needed for the installed tests.
  * tests: Install the slow-connect-preload.so library and use it
.
glib2.0 (2.59.2-1) experimental; urgency=medium
.
  * New upstream release
    + Fix check on GDBusMessage size when reading it.
    + Add async GIO API: g_file_query_default_handler_async(),
      g_app_info_launch_uris_async()
    + Fix some bugs in the Happy Eyeballs implementation.
    + Install a new generated header with enum types for Unicode enums.
    + Support the XDG trash portal.
    + Autotools support is gone.
    + g_format_size() now uses a no-break space to separate digits and units;
      translations will need to be updated accordingly.
    + New g_queue_clear_full() API.
    + Fix argument quoting on win32 when spawning subprocesses.
    + Allow polling more than 64 handles on win32 using g_poll().
    + Tag various tests as ‘flaky’. These are no longer run routinely on our
      upstream CI machines, and downstream packagers may want to not run them
      (or not treat those test failures as package build failures) on their
      test machines either. They are in the `flaky` test suite.
    + Add overlay support to g_resources_get_info().
    + Support defaults and locks in the keyfile GSettings backend. This will
      be used for flatpaks.
    + Accept unquoted strings in the keyfile GSettings backend to simplify
      things for sysadmins.
    + Update our contribution guidelines (`CONTRIBUTING.md`).
    + Add writev() and writev_all() APIs to GOutputStream and
      GPollableOutputStream, and provide implementations of them for many
      subclasses.
  * Refresh patches, drop trash test patches which are upstream now
  * build-time tests: Run "flaky" suite separately and non fatally
  * debian/libglib2.0-0.symbols: Add new symbols from 2.59.{1,2}
.
glib2.0 (2.59.0-1) experimental; urgency=medium
.
  * New upstream release
  * Update patches and drop upstreamed ones
  * debian/control: Update meson BD to ≥ 0.48.0 per upstream
  * debian/rules: enable-selinux takes "enabled" or "disabled" now.
    Not true/false.
  * debian/*: Update for experimental
  * debian/libglib2.0-0.symbols: Update with new symbols for this release
.
glib2.0 (2.58.3-3) unstable; urgency=medium
.
  * control, rules: Build with gcc-8. See #931921 - when we're built with
    gcc-9, some applications that use GLib might start hanging.
.
glib2.0 (2.58.3-2) unstable; urgency=medium
.
  * Team upload
  * d/p/gfile-Limit-access-to-files-when-copying.patch:
    Backport patch from upstream to ensure files don't temporarily have
    less restrictive permissions during copying
    (Closes: #929753, CVE-2019-12450)
  * d/watch: Only watch for 2.58.x releases now that 2.60.x is out
  * Add cross-reference to #919777 in previous changelog entry
.
glib2.0 (2.58.3-1) unstable; urgency=medium
.
  * Team upload
.
  [ Iain Lane ]
  * debian/gbp.conf: Use upstream/2.58.x
.
  [ Simon McVittie ]
  * New upstream release
    - Fix crashes related to the GUnixMount API (Closes: #919777)
    - Make G_DEFINE_INTERFACE compatible with g++ -Wint-in-bool-context
    - Drop patches that were applied upstream
  * d/p/gdbusmessage-Fix-check-on-upper-limit-of-message-size.patch:
    Add patch from upstream glib-2-58 branch to limit the maximum size of
    D-Bus messages according to the protocol specification
    (the limit was 256M, and is now the correct 128M)
.
glib2.0 (2.58.2-4) unstable; urgency=medium
.
  [ Simon McVittie ]
  * Update patch metadata
.
  [ Iain Lane ]
  * trash-test-Don-t-assume-that-.local-exists.patch,
    trash-test-Don-t-rely-on-being-able-to-determine-mount-po.patch:
    Cherry pick two patches by Simon McVittie (slightly modified by Iain Lane)
    to fix the trash test on Launchpad autobuilders.
.
glib2.0 (2.58.2-3) unstable; urgency=medium
.
  * Team upload
  * Release to unstable
  * Standards-Version: 4.3.0 (no changes required)
  * d/p/gvariant-test-Also-force-alignment-for-tuple-test-data.patch:
    Mark as forwarded
  * debian/Skip-unreliable-test_threaded_singleton-by-default.patch:
    Don't run test_threaded_singleton() at build-time or in the part of
    the autopkgtest run that must succeed. Run it from d/tests/flaky
    instead.
.
glib2.0 (2.58.2-2) experimental; urgency=medium
.
  * Team upload
  * d/p/gvariant-test-Also-force-alignment-for-tuple-test-data.patch:
    Fix gvariant test failure on s390x by forcing more test data to be aligned
    (Closes: #917980)
  * d/p/debian/closures-test-Skip-on-arm-unless-flaky-tests-are-allowed.patch,
    d/tests/flaky:
    Only run closures test on arm* as part of a separate, flaky autopkgtest.
    This test does not seem to be reliable enough for its failures to be
    treated as release-critical, at least on arm*. If we run too many
    iterations, it fails on CPUs where 16-bit accesses are slow; if we run
    too few, it occasionally fails when one thread starves another.
    (Closes: #917983)
  * d/p/debian/Disable-some-tests-on-slow-architectures-which-keep-faili.patch,
    d/p/debian/Skip-test-which-performs-some-unreliable-floating-point-c.patch:
    d/tests/flaky:
    Use g_test_skip() for flaky tests, and run them from d/tests/flaky
.
glib2.0 (2.58.2-1) experimental; urgency=medium
.
  * Team upload
  * New upstream release
  * Drop many patches that were applied upstream
  * d/p/tests-Allocate-gvariant-data-from-the-heap-to-guarantee-a.patch:
    Add patch from upstream to fix alignment of GVariant test data
  * d/libglib2.0-0.symbols: Update for new ABI
  * d/tests/installed-tests: Log execution environment
  * postinst: Convert triggers into a function
  * postinst: Quote strings with #TOKENS# to fix syntax highlighting
  * postinst: Add a vim modeline
.
glib2.0 (2.58.1-6) experimental; urgency=medium
.
  * Team upload
  * d/p/closures-test-Avoid-timeout-on-ARM64-CPUs.patch:
    Rename from
    d/p/debian/closures-test-Run-fewer-iterations-on-ARM64-and-armhf.patch,
    increase the test timeout to prevent this test from timing out on
    Cortex-A57 CPUs when building with Meson, and mark as forwarded
    upstream
  * Disable xattr support on kFreeBSD.
    kFreeBSD has stub implementations of getxattr() etc. which will
    always fail. Autoconf considers these to be present, but Meson
    detects them and treats them as absent, resulting in configuration
    failure.
.
glib2.0 (2.58.1-5) experimental; urgency=medium
.
  * Team upload
  * d/p/*:
    Update to upstream glib-2-58 branch as of 2.58.1-89-g7aa52a7d5,
    except for translations
  * d/p/mainloop-test-Fix-race-conditions.patch:
    Add patch from upstream git master to fix race conditions in
    mainloop test
  * d/p/meson-Define-__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4-on-GNU-Li.patch:
    Add proposed patch to fix detection of atomic operations on armel
  * Respect nocheck in DEB_BUILD_OPTIONS
  * Adjust test timeouts:
    - Increase armel, armhf, hppa timeout multiplier from x3 to x5
    - Reduce mips*, sparc* timeout multiplier from x10 to x5
    - Reduce timeout multiplier for architectures known to have qemu
      buildds from x50 to x20
  * d/rules: Set Meson cross properties using a modified debcrossgen.
    This avoids embedding a local copy of GNUlib (v)(sn)printf when
    cross-compiling. (Workaround for #912559)
.
glib2.0 (2.58.1-4) experimental; urgency=medium
.
  * Team upload
  * d/rules: Deduplicate test invocation
  * Use `meson test` directly, instead of going via `ninja test`
  * Multiply Meson test timeouts.
    Use x3 timeouts for most architectures (in general the timeouts in
    the upstream Meson build system are somewhat optimistic), x10 for
    the mips and sparc families, and x50 for architectures known to
    use qemu for buildds.
  * Enable FAM support on Hurd and kFreeBSD.
    In the Autotools build system this was auto-detected, but in Meson it
    is off by default and must be explicitly enabled if wanted.
  * d/p/meson-Mark-1bit-emufutex-test-as-slow.patch:
    Increase timeout for the 1bit-emufutex test
.
glib2.0 (2.58.1-3) experimental; urgency=medium
.
  * Team upload
  * Upload to experimental to check that everything is OK with the
    switch to Meson
  * Switch build system to Meson as recommended by upstream
    - Stop removing .la files: Meson doesn't build those
    - d/p/debian/61_glib-compile-binaries-path.patch: Change the same
      path if we build with Meson
    - d/patches: Apply patches proposed for backport from master to
      glib-2-58 in upstream MR 392. These fix various build issues,
      mostly around Meson. Some of these patch Windows-specific code,
      but they are likely to be in 2.58.2 and upstream asked for wider
      testing, so I'm applying them anyway, to test the complete set.
    - d/p/Spelling-*.patch:
      MR 392 also applies patches from upstream git master to fix various
      spelling mistakes detected by Lintian
  * Always generate testmarshal.h, even when cross-compiling
    (Closes: #908334)
  * Fix static linking and make sure it won't regress, prompted by
    comparing the Autotools and Meson builds:
    - Add missing -dev dependencies on libffi-dev, libmount-dev,
      libselinux1-dev
    - d/p/Autotools-Move-libmount-from-Libs.private-to-Requires.pri.patch:
      Add patch from upstream git master to fix static linking with libgio
    - d/tests/build: Exercise all libraries
    - d/tests/build-static: Exercise static linking
  * d/rules: Fix some permissions (equivalent of #1539 upstream)
  * Add Lintian override for a spelling-error-in-binary false positive
  * Add some Lintian overrides for hardening-no-fortify-functions.
    These objects mostly don't use libc directly.
  * Remove /usr/bin/gio-launch-desktop symlink.
    It's an implementation detail of libgio, and isn't intended to be
    run directly. Removing it from PATH silences a Lintian warning about
    it not having a man page.
  * Don't delete compiled GSettings schemas during purge if the dpkg
    reference count is greater than 1. This avoids deleting and regenerating
    it unnecessarily if another architecture's libglib2.0-0 is still
    installed. (Closes: #775854)
  * d/tests/installed-tests: Replace deprecated $ADTTMP with $AUTOPKGTEST_TMP
  * d/tests/control: Mark build tests as superficial (see #904979)
.
glib2.0 (2.58.1-2) unstable; urgency=medium
.
  * Fix dh_missing rule for arch:all build with compat 11
.
glib2.0 (2.58.1-1) unstable; urgency=medium
.
  * New upstream release
  * Drop patches applied in new release:
    - Fix-g_icon_to_string-regression-doc-inconsistency.patch
    - tests-timer-Skip-test_timeval_to_iso8601_overflow-if-we-c.patch
  * Refresh 61_glib-compile-binaries-path.patch
  * Bump Standards-Version to 4.2.1
  * Bump debhelper compat to 11
.
glib2.0 (2.58.0-4) unstable; urgency=medium
.
  [ Simon McVittie ]
  * Adjust installation path of gdb scripts to match GLib itself.
    We used to put libglib-2.0.so.0 in /lib/MULTIARCH, but this is no
    longer the case since 2.56.0-5.
  * Wrap and sort (build-)dependency lists (wrap-and-sort -a)
  * Wrap and sort file lists (wrap-and-sort -a)
  * Install HTML in /usr/share/gtk-doc/html with symlinks in /usr/share/doc.
    The gtk-doc documentation is technically a functionally significant
    part of the package (it affects cross-reference generation during build
    of other packages) so according to Policy §12.3 it is not appropriate
    for /usr/share/doc.
    Using the upstream default installation path for the HTML also makes
    it more straightforward to switch to the Meson build system, because
    the Meson build does not have an equivalent of --with-html-dir.
    - d/debian/libglib2.0-doc.maintscript: Add migration steps
  * d/p/debian/Look-for-gio-launch-desktop-in-libdir-glib-2.0.patch:
    Also patch meson build system
.
  [ Jeremy Bicha ]
  * Cherry-pick Fix-g_icon_to_string-regression-doc-inconsistency.patch
    - Have g_icon_new_for_string() go back to only returning a single name
      when created with a single name since some apps assume that behavior.
      (Closes: #908705)
.
glib2.0 (2.58.0-3) unstable; urgency=medium
.
  [ Iain Lane ]
  * Run fewer iterations of clousures test on armhf too
.
glib2.0 (2.58.0-2) unstable; urgency=medium
.
  * Cherry-pick upstream patch to fix test_timeval_to_iso8601_overflow on
    32-bit, fixing FTBFS there.
.
glib2.0 (2.58.0-1) unstable; urgency=medium
.
  [ Jeremy Bicha ]
  * New upstream release
  * Drop patches applied in new release:
    - date-test-Use-g_test_skip-not-g_test_incomplete.patch
    - g_binding_unbind-make-it-more-introspection-friendly-allo.patch:
  * Release to unstable
.
  [ Simon McVittie ]
  * d/p/debian/closures-test-Run-fewer-iterations-on-ARM64.patch:
    Update metadata
  * libglib2.0-dev-bin: Add Suggests for the packages containing
    xmllint and gdk-pixbuf-pixdata, which are sometimes invoked by
    glib-compile-resources (Closes: #834998)
  * Invoke dh_python3 twice so that we correctly rewrite the shebang
    line for /usr/bin scripts (Closes: #876009)
  * Don't install very old changelogs and NEWS files
  * Install README.md instead of stub README
.
glib2.0 (2.57.2-2) experimental; urgency=medium
.
  * Cherry-pick g_binding_unbind-make-it-more-introspection-friendly-allo.patch
    to fix pygobject build (LP: #1787474)
.
glib2.0 (2.57.2-1) experimental; urgency=medium
.
  * Team upload
  * New upstream development release
  * d/watch: Look for odd-numbered releases
  * Rebase patch series
  * Install gio-launch-desktop in libglib2.0-0's private libdir to avoid
    a circular dependency between libglib2.0-0 and libglib2.0-bin
    - d/p/debian/Look-for-gio-launch-desktop-in-libdir-glib-2.0.patch:
      Look for it there
  * d/copyright: Update
  * d/libglib2.0-0.symbols: Update
  * Use upstream autogen.sh for autoreconf
  * Don't clean org.gtk.test.gschema.override.orig
  * d/gbp.conf: Use upstream/latest branch
  * d/p/Drop-a-questionable-test-from-the-refstring-suite.patch:
    Add patch to fix FTBFS on i386
  * d/p/date-test-Use-g_test_skip-not-g_test_incomplete.patch:
    Add patch to fix autopkgtest failures without locales-all
  * d/gbp.conf: Don't number patches
.
glib2.0 (2.56.1-2) unstable; urgency=medium
.
  [ Tim Lunn ]
  * libglib2.0-0.triggers:use interest-await trigger for schemas
.
  [ Iain Lane ]
  * debian/patches/tests-network-monitor-Always-use-the-dummy-proxy-res.patch:
    Take patch from upstream to ignore the system's proxy settings for the
    network-monitor test - it's testing an "abstract" network unrelated to the
    system's network, and these settings interfere with that. This fixes a
    failure in the Ubuntu autopkgtest machines, which have a proxy set.
.
glib2.0 (2.56.1-1) unstable; urgency=medium
.
  [ Tim Lunn ]
  * New upstream release
  * Drop patches included in new release
  * libglib2.0-0.triggers: Use interest-noawait triggers, generating caches
    doesn't need to block configuration. flagged by lintian
    uses-implicit-await-trigger warning.
.
  [ Simon McVittie ]
  * Explicitly use autoconf build system, even with debhelper 11.2
    (see #895174)
.
glib2.0 (2.56.0-6) unstable; urgency=medium
.
  * Team upload
  * d/p/0002-gapplication-Tighten-up-application-ID-validation.patch:
    Transliterate commit message into ASCII so git-buildpackage doesn't
    export it as a blob of base64
  * d/p/g_test_dbus_down-Ensure-next-test-does-not-use-old-c.patch:
    Add patch to address a race condition that sometimes makes D-Bus-based
    tests fail (Closes: #894677)
  * d/patches: Improve metadata on various patches
.
glib2.0 (2.56.0-5) unstable; urgency=medium
.
  [ Simon McVittie ]
  * Use `set -e` in the (empty) prerm to avoid a Lintian warning
  * Add Lintian override for the empty prerm used to work around
    #887629
.
  [ Michael Biebl ]
  * Stop installing libglib to /lib.
    Late mounting of /usr is no longer supported, so this is not necessary
    anymore.
  * Drop maintscript migration code from pre-jessie.
  * Drop obsolete Breaks.
.
glib2.0 (2.56.0-4) unstable; urgency=medium
.
  * Fix typo: libglib2.0-dev-bin Depends on python3-distutils, not
    distuils (Closes: #893773)
  * Restore `set -x` in debian/tests/build
.
glib2.0 (2.56.0-3) unstable; urgency=medium
.
  [ Iain Lane ]
  * debian/tests/build: Add Restrictions: allow-stderr. We run this test with
    `set -x', which outputs to stderr, and would like to continue doing so.
.
  [ Jeremy Bicha ]
  * Depend and Build-Depend on python3-distutils to fix build failures
    since python3 no longer depends on python3-distutils (Closes: #893736)
.
glib2.0 (2.56.0-2) unstable; urgency=medium
.
  [ Simon McVittie ]
  * Merge from experimental to unstable
  * d/tests/build: Don't rely on having unmerged /usr
  * d/watch: Only watch for stable releases
  * d/gbp.conf: Use debian/master, upstream/2.56.x branches
  * d/control: Update Vcs-* for default branch
.
glib2.0 (2.56.0-1) experimental; urgency=medium
.
  * Team upload
  * New upstream stable release 2.56.0
  * d/p/000?-gdbus-tool-*.patch:
    Drop patches that came from upstream
  * Refresh remaining patches
  * d/p/0001-tests-Use-modern-test-assertions-in-GApplication-tes.patch,
    d/p/0002-gapplication-Tighten-up-application-ID-validation.patch:
    Cherry-pick GApplication ID fixes from upstream 2.56 branch
    (GNOME #793400)
.
glib2.0 (2.55.2-2) experimental; urgency=medium
.
  * Merge changes from unstable, in particular:
    + d/libglib2.0-dev.prerm: Add an empty prerm to make sure that we have a
      way to recover from #887629 in stretch (Closes: #887863)
  * d/p/0001-gdbus-tool-Ignore-unknown-options-for-the-emit-subco.patch,
    d/p/0002-gdbus-tool-Make-dest-optional-for-emit-again.patch,
    d/p/0003-gdbus-tool-Don-t-repeatedly-complete-signal.patch,
    d/p/0004-gdbus-tool-Factor-out-common-GOptionContext-construc.patch:
    Cherry-pick from upstream. Fix `gdbus emit' to not require `--dest', and
    improve its bash completion. Should fix the dbus-test-runner autopkgtest,
    which relied on this behaviour.
.
glib2.0 (2.55.2-1) experimental; urgency=medium
.
  * debian/control{,.in}: Update Vcs-* to specify debian/experimental branch.
  * New upstream release 2.55.2:
    + GFile now has API to get the path without copying
  * debian/patches/gdbus-threading-test-Allow-even-longer-for-test_method_ca.patch,
    debian/patches/gdatetime-Avoid-repeated-floating-point-multiplies-w.patch,
    debian/patches/gdatetime-Mark-the-usecs-as-volatile.patch:
    Drop, applied upstream in this release.
  * debian/libglib2.0-0.symbols: New symbols for 2.55.2
.
glib2.0 (2.55.1-1) experimental; urgency=medium
.
  * debian/gbp.conf, debian/watch: Update for experimental
  * New upstream development release 2.55.1
  * debian/libglib2.0-0.symbols: Update with new symbols in this release.
  * debian/patches/gdatetime-Avoid-repeated-floating-point-multiplies-w.patch,
    debian/patches/gdatetime-Mark-the-usecs-as-volatile.patch: Cherry-pick two
    patches from upstream. Fix some precision problems within GDateTime, that
    in some cases resulted in incorrect answers on i386.
.
glib2.0 (2.54.3-2) unstable; urgency=medium
.
  * Team upload
  * d/libglib2.0-dev.prerm: Add an empty prerm to make sure that we have
    a way to recover from #887629 in stretch (Closes: #887863)
  * d/p/gdbus-threading-test-Allow-even-longer-for-test_method_ca.patch:
    Mark as applied upstream
  * d/p/gmain-Partial-revert-of-recent-wakeup-changes-to-gmain.c.patch:
    Apply patch from upstream glib-2-54 branch to revert GWakeup changes
    that appear to have broken WebKit and/or LibreOffice
    (Closes: #887492)
.
glib2.0 (2.54.3-1) unstable; urgency=medium
.
  [ Simon McVittie ]
  * Move Vcs-* to salsa.debian.org
  * New upstream stable release
    - Fix a race condition when a GCancellable is cancelled in another
      thread (Closes: #884654)
    - Drop patches for #884661, fixed upstream
  * d/p/gdbus-peer-Skip-test-during-Debian-package-build.patch:
    Drop. We should no longer need to skip this test now that #884654
    is fixed.
  * d/p/Do-not-attempt-to-autolaunch-a-session-dbus-daemon-w.patch:
    Drop patch. It has not been necessary since 2.50.
  * d/p/0001-Fix-trashing-on-overlayfs.patch,
    d/p/0001-timer-test-use-volatile-for-locals.patch,
    d/p/gdbus-threading-test-Allow-even-longer-for-test_method_ca.patch:
    Mark as forwarded upstream
  * d/patches: Move non-upstreamable patches (Debian-specific changes
    and workarounds) to d/p/debian, and to the bottom of d/p/series
  * d/watch: Only watch for the upstream stable branch
.
  [ Iain Lane ]
  * debian/gbp.conf: Update upstream branch to upstream/2.54.x following
    DEP-14.
.
glib2.0 (2.54.2-5) unstable; urgency=medium
.
  * Set Rules-Requires-Root to no. This package builds successfully
    with the same content in that mode.
  * d/p/61_glib-compile-binaries-path.patch: Only use the multiarch
    path for glib-compile-schemas, not for glib-compile-resources
  * Install glib-compile-resources into PATH in libglib2.0-dev-bin,
    not libglib2.0-bin: it is a development tool used at compile-time
    - libglib2.0-dev-bin Breaks/Replaces older libglib2.0-bin
  * Install the glib-compile-resources binary in libglib2.0-dev-bin,
    not libglib2.0-0. This means we get an executable version of that
    binary when cross-compiling (Closes: #885019)
  * Bump Standards-Version to 4.1.3
.
glib2.0 (2.54.2-4) unstable; urgency=medium
.
  * Team upload
  * d/p/closures-test-Run-fewer-iterations-on-ARM64.patch:
    Run more iterations on ARM64 than in 2.54.2-3, but fewer than in
    2.54.2-2. If we don't run enough iterations, we get an assertion
    failure when the main thread starves the other threads.
  * d/p/gmenumodel*.patch: Mark as upstreamed in 2.54.3 and 2.55.1
  * d/rules: Set DEB_BUILD_TIME_TESTS when running dh_auto_test, so that
    tests can distinguish between autopkgtest and `make check`
  * d/p/gdbus-peer-Skip-test-during-Debian-package-build.patch:
    Skip the gdbus-peer test during package build, so that its known
    race condition does not cause intermittent FTBFS (mitigates: #884654)
.
glib2.0 (2.54.2-3) unstable; urgency=medium
.
  * Team upload
  * d/patches: Re-export with gbp pq
  * d/patches: Use `gbp pq export`-style metadata, retrieving authors
    and dates from d/changelog where needed
  * d/p/closures-test-Run-fewer-iterations-on-ARM64.patch: New patch.
    tests/refcount/closures: Run fewer iterations on ARM64
    (mitigates: #880883)
  * d/p/gdbus-threading-test-Allow-even-longer-for-test_method_ca.patch:
    New patch. Allow even longer for the gdbus-threading test, and
    re-enable it on 32-bit ARM now that the timeout is longer
    (Closes: #884660)
  * d/p/gmenumodel-test-If-something-goes-wrong-don-t-wait-foreve.patch,
    d/p/gmenumodel-test-Wait-for-the-expected-events-to-happen.patch:
    Add patches to make the GMenuModel test more patient (Closes: #884661)
  * d/p/gwakeuptest-Be-less-parallel-unless-invoked-with-m-slow.patch:
    Reduce number of threads and number of operations in response to
    timeout on reproducible-builds infrastructure (mitigates: #884659)
.
glib2.0 (2.54.2-2) unstable; urgency=medium
.
  * Update Vcs fields for conversion to git
  * Add debian/gbp.conf
  * Bump Standards-Version to 4.1.2
.
glib2.0 (2.54.2-1) unstable; urgency=medium
.
  [ Jeremy Bicha ]
  * New upstream release
.
  [ Didier Roche ]
  * debian/patches/01_gettext-desktopfiles.patch:
    - fix untranslated desktop action names when using gettext
      (Closes: #877761)
.
  [ Simon McVittie ]
  * Skip gtk-doc documentation unless we are building libglib2.0-doc,
    fixing cross-builds (Closes: #870346)
    - Note that gtk-doc-tools is still in Build-Depends, not
      Build-Depends-Indep, because we need it for autoreconf
  * Explicitly disable documentation for the udeb build
  * Skip build-time tests for Arch:all builds - testing once per
    architecture is sufficient
  * Remove unused lintian override for an example file that is no
    longer installed
.
glib2.0 (2.54.1-1) unstable; urgency=medium
.
  [ Jeremy Bicha ]
  * New upstream release
  * Bump Standards-Version to 4.1.1
.
  [ Michael Biebl ]
  * Drop uploaders.mk include as it breaks the clean target.
    Updating the Uploaders list is already handled by the gnome dh addon.
.
glib2.0 (2.54.0-1) unstable; urgency=medium
.
  * New upstream stable release.
.
glib2.0 (2.53.7-1) unstable; urgency=medium
.
  * New upstream release.
  * debian/patches/81-skip-monitor-test-on-non-linux.patch:
    + Refreshed.
  * debian/control.in: drop automake and autotools-dev build dependencies,
    dh-autoreconf does that for us.
  * Bump Standards-Version to 4.1.0; no changes needed.
.
glib2.0 (2.53.6-1) unstable; urgency=medium
.
  * New upstream release.
  * git_glib-mkenums-utf8.patch, git_glib-mkenums-flags.patch: Drop, now
    applied upstream.
  * debian/rules: Don't pass -X.la to dh_auto_install - it can easily lead to
    unwanted removals (not claiming this is happening here)
  * debian/rules: Fix arguments to dh_auto_test so tests are run again
  * debian/rules, debian/control{,.in}: Use dh_missing and not dh_install
    --list-missing. Also upgrade this check to --fail-missing.
  * debian/rules: Don't run the tests under fakeroot; it makes them fail with
    dbus-related authentication problems.
.
glib2.0 (2.53.4-3) unstable; urgency=medium
.
  [ Matthias Klumpp ]
  * Update Vcs-* URLs
.
  [ Jeremy Bicha ]
  * Bump Breaks/Replaces: libglib2.0-dev to 2.53 (Closes: #867679)
  * Add git_glib-mkenums-utf8.patch:
    - Backport commit to fix "glib-mkenums: UnicodeDecodeError"
      (Closes: #870310)
  * Add git_glib-mkenums-flags.patch:
    - Backport commit to fix mate-panel FTBFS (Closes: #870212)
.
glib2.0 (2.53.4-2) unstable; urgency=medium
.
  * Upload to unstable
.
glib2.0 (2.53.4-1) experimental; urgency=medium
.
  * New upstream release 2.53.4
    + Unicode support has been updated to Unicode 10.0.0
    + glib-genmarshal and glib-mkenums have been rewritten in python
    + GLib can now be built with meson. autotools are still supported
.
glib2.0 (2.53.3-1) experimental; urgency=medium
.
  * New upstream release 2.53.3.
  * d/p/0001-gdatetime-Fix-a-potential-overflow-in-overflow-calcu.patch,
    d/p/0002-tests-Fix-GDateTime-overflow-tests-on-32-bit-archite.patch,
    d/p/0003-tests-Fix-overflows-in-find_maximum_supported_tv_sec.patch:
    Cherry-picks to fix some overflow problems in GDateTime on 32 bit arches.
.
glib2.0 (2.53.2-1) experimental; urgency=medium
.
  * New upstream release 2.53.2
    + A few new number parsing functions have been added:
      - g_ascii_string_to_signed
      - g_ascii_string_to_unsigned
      These have better error handling than the existing ones.
    + glib-mkenums now supports /*< private >*/ and /*< public >*/
    + GSettings now consider XDG_DATA_HOME in addition to XDG_DATA_DIRS.
  * debian/libglib2.0-0.symbols: Add new symbols for 2.53.1.
  * debian/patches/skip-broken-dbus-appinfo-test.patch: Drop - this test works
    now.
.
glib2.0 (2.53.1-1) experimental; urgency=medium
.
  * New upstream release 2.53.1
    + The gdbus tool gained a wait command
    + g_unix_signal_source_new support SIGWINCH now
    + There are now g_enum_to_string and g_flags_to_string functions
    + A new function to instantiate objects: g_objet_new_with_properties
    + GParameter and related APIs have been deprecated
  * debian/libglib2.0-0.symbols: Add new symbols for 2.53.1.
.
glib2.0 (2.52.0-1) experimental; urgency=medium
.
  * New upstream release 2.52.0
  * d/p/tests-gdatetime-Use-a-real-rather-than-invented-time.patch: Drop,
    applied in this release.
.
glib2.0 (2.51.5-1) experimental; urgency=medium
.
  * New upstream release 2.51.5
  * Drop patches applied upstream in this release:
    - Install-gdb-Python-helpers-as-data-not-as-executable.patch
    - glib-mkenums-Sort-input-files-for-more-deterministic.patch
  * debian/patches/tests-gdatetime-Use-a-real-rather-than-invented-time.patch:
    Cherry-pick a patch from upstream to fix GDateTime tests when tzdata ≥
    2017a is in use.
  * debian/libglib2.0-dev.install: Install the gdb script for libglib-2.0.so.*
    into .../lib instead of .../usr/lib - it needs to match the installed path
    of the library and we put libglib-2.0.so.* into /lib.
  * debian/libglib2.0-0.symbols: Add g_content_type_is_mime_type
.
glib2.0 (2.51.4-1) experimental; urgency=medium
.
  * Team upload
  * New upstream release 2.51.4 (and 2.51.3)
  * Build with dh instead of cdbs
    - Move to debhelper compat level 10
    - Use dpkg-buildflags variables to extend LDFLAGS
    - Enable bindnow hardening
    - Remove indirection via $(SHARED_PKG), etc. variables
    - Let dh_gnome_clean update the Uploaders instead of reinventing it
    - Install some missing files detected by dh_install --list-missing
    - Fix lintian warnings about useless use of dh-exec
    - debian/dh_listmissing.pl: Remove
  * Improve packaging for cross-compiling (Closes: #648621, #842442)
    - Move glib-genmarshal and related files to a new M-A:foreign package
      libglib2.0-dev-bin. Thanks to Helmut Grohne for the patch.
    - Additionally move gdbus-codegen and gtester-report to
      libglib2.0-dev-bin.  They are architecture-independent, so in
      particular clearly Multi-Arch: foreign; they aren't large enough to
      justify a separate Architecture: all package. This works around
      dh_python3's postinst snippet failing when used in a Multi-Arch: same
      package with more than one instance installed.
    - Move gtester to libglib2.0-dev-bin. It is a test-runner that can
      operate on any executable, and does not rely on a matching architecture.
    - Move gobject-query to libglib2.0-dev-bin. It prints the same things on
      all architectures, and it isn't clear what use it is; glib-2.0.m4
      checks for it and AC_SUBSTs it, but according to codesearch.debian.net
      no package actually seems to run it.
    - Make libglib2.0-dev Multi-Arch: same
  * Move gdb helpers from libglib2.0-0-dbg to libglib2.0-dev, move
    detached debug symbols from libglib2.0-0-dbg to autogenerated -dbgsym
    packages, and remove the libglib2.0-0-dbg binary package
  * Add support for noudeb build profile
    - Do not do the udeb build if the noudeb profile is selected,
      for faster test-builds
  * Fix assorted Lintian warnings
    - Add missing build-dependency on dh-python
      + remove obsolete Lintian override for mmissing B-D on python
    - Add Lintian overrides for some intentionally weird scripts used in tests
    - Do not install glib_gdb.py, gobject_gdb.py executable. They are
      libraries to be imported by the gdb hooks, not scripts.
    - Don't generate a ldconfig trigger for libglib2.0-tests, which does
      not contain any public shared libraries
  * Add patch to make glib-mkenums output more reproducible (Closes: #809152)
  * Explicitly build-depend on automake so that the aspcud resolver used for
    experimental does not decide automake1.11 is the best solution to
    a dependency on automake | automaken
.
glib2.0 (2.51.2-1) experimental; urgency=medium
.
  * New upstream release 2.51.2 (& 2.51.1).
    + Minimal support for UUIDs has been added
    + A new file attribute, G_FILE_ATTRIBUTE_RECENT_MODIFIED has been added to
      improve sorting of recent files
    + glib-compile-resources grew a --generate-phony-targets flag
    + GLib now installs a valgrind suppressions file for GLib and GIO
  * debian/patches/skip-brokwn-dbus-appinfo-test.patch: Refresh (and fix the
    typo in the filename)
  * debian/libglib2.0-0.symbols: Add g_uuid* symbols which are new in this
    release
.
glib2.0 (2.51.0-2) experimental; urgency=medium
.
  * Merge changes from 2.50.2-2:
    + debian/rules: disable libmount on !linux (Closes: #844052)
    + debian/patches/0001-Fix-trashing-on-overlayfs.patch: Update with new
      version from the upstream report to hopefully fix trashing of files in
      directories which are symlinks to different devices. (Closes: #800047)
      (LP: #1638245)
.
glib2.0 (2.51.0-1) experimental; urgency=medium
.
  * debian/control{,.in}: Branch to experimental
  * debian/watch: Track unstable releases again.
  * New upstream release 2.51.0
    + glib-genmarshal and glib-mkenums have gained --output options for better
      build system integration
    + New API: g_utf8_make_valid
  * Update debian/libglib2.0-0.symbols.
.
glib2.0 (2.52.3-1) unstable; urgency=medium
.
  * New upstream release.
  * skip-brokwn-dbus-appinfo-test.patch,
    tests-gdatetime-Use-a-real-rather-than-invented-time.patch:
    + Dropped, applied upstream.
  * debian/libglib2.0-0.symbols:
    + Add new symbols.
.
glib2.0 (2.50.3-2) unstable; urgency=medium
.
  * debian/patches/tests-gdatetime-Use-a-real-rather-than-invented-time.patch:
    Cherry-pick a patch from upstream to fix GDateTime tests when tzdata ≥
    2017a is in use. (Closes: #858214)
.
glib2.0 (2.50.3-1) unstable; urgency=medium
.
  * New upstream release.
.
glib2.0 (2.50.2-2) unstable; urgency=medium
.
  * debian/rules: disable libmount on !linux (Closes: #844052)
  * debian/patches/0001-Fix-trashing-on-overlayfs.patch: Update with new
    version from the upstream report to hopefully fix trashing of files in
    directories which are symlinks to different devices. (Closes: #800047)
.
glib2.0 (2.50.2-1) unstable; urgency=medium
.
  * New upstream release.
  * Track stable releases in debian/watch.
.
glib2.0 (2.50.1-1) unstable; urgency=medium
.
  [ Jason Crain ]
  * libglib2.0-bin: includes a new 'gio' commandline tool (Closes: #840164)
.
  [ Andreas Henriksson ]
  * New upstream release.
.
glib2.0 (2.50.0-2) unstable; urgency=medium
.
  [ Simon McVittie ]
  * Build-depend on tzdata, which is no longer transitively Essential.
    One test needs it. (Closes: #839487)
.
  [ Michael Biebl ]
  * Fix Vcs-* to point to unstable.
  * Mark dependencies which are required to run the test-suite with
    <!nocheck>.
  * Add explicit Build-Depends on xsltproc, docbook-xml and docbook-xsl.
    Besides libxml2-utils, those are needed for building the man pages.
  * Drop Build-Depends on dbus-x11. The test-suite uses a mock version of
    dbus-launch nowadays, so this dependency is no longer needed.
    (Closes: #835884)
  * Use dh-exec to substitute ${DEB_HOST_MULTIARCH} in .install, .links and
    .dirs files.
.
glib2.0 (2.50.0-1) unstable; urgency=medium
.
  * New upstream release.
  * Refresh patches.
.
glib2.0 (2.49.7-1) unstable; urgency=medium
.
  * New upstream release.
  * Update debian/libglib2.0-0.symbols with one addition.
.
glib2.0 (2.49.6-1) unstable; urgency=low
.
  * New upstream release.
  * Limit the libmount-dev build-depedency to [linux-any].
.
glib2.0 (2.49.5-2) experimental; urgency=medium
.
  * debian/rules: Disable libmount for the udeb build; there's no
    libmount-udeb, no immediate plans to provide one, and the functionality in
    glib isn't that interesting in the d-i context at the present time.
.
glib2.0 (2.49.5-1) experimental; urgency=medium
.
  [ Simon McVittie ]
  * Merge packaging from unstable.
.
  [ Iain Lane ]
  * New upstream release 2.49.5
  * debian/patches/gregex-loosen-behaviour-testing.patch: Drop this patch -
    it's in 2.49.5.
  * debian/libglib2.0-0.symbols: Add symbols for async
    g_app_info_launch_default_for_uri.
  * debian/control{,.in}, debian/rules: Enable libmount support
.
glib2.0 (2.48.1-3) unstable; urgency=medium
.
  * debian/tests/control: do not fail on stderr output from
    installed-tests. If gvfs happens to be installed, it gets
    D-Bus-activated (even if it's disabled via GIO_USE_VFS and
    GIO_USE_VOLUME_MONITOR), resulting in logging from dbus-daemon.
    (Closes: #821031)
  * debian/tests/installed-tests: explicitly select built-in VFS and
    volume monitor
  * d/p/gregex-loosen-behaviour-testing.patch: add patch from upstream
    bug 767240 (not applied yet) to relax assertions about PCRE's behaviour,
    which changed in 8.38 (Closes: #834272)
  * d/rules: unset XDG_CONFIG_HOME, XDG_CACHE_HOME, XDG_DATA_HOME,
    XDG_CONFIG_DIRS, XDG_DATA_DIRS so that they are based on the temporary
    HOME. This avoids FTBFS if the user doing the build has these variables
    already set in their build environment (Closes: #834334)
.
glib2.0 (2.48.1-2) unstable; urgency=medium
.
  * Remove refdbg variant. Thanks to Jonny Lamb for the patch.
    Closes: #827269.
  * Switch to python3.
.
glib2.0 (2.49.4-1) experimental; urgency=medium
.
  * New upstream release.
  * debian/patches/add-missing-gio-xml.patch:
    + Dropped, gio.xml is now shipped in the tarballs.
  * debian/patches/0001-Fix-gio-tests-socket-listener.patch:
    + Dropped, included upstream.
.
glib2.0 (2.49.3-1) experimental; urgency=medium
.
  * Switch to python3.
  * New upstream release.
  * d/p/0001-gsettings-test-Wrap-guint64-literals-in-G_GUINT64_CO.patch:
    + Dropped, applied upstream.
  * debian/patches/add-missing-gio-xml.patch:
    + Add gio.xml file, which is missing from the tarball. Needed for the
      documentation build.
  * debian/patches/0001-Fix-gio-tests-socket-listener.patch:
    + Fix a test hang.
  * debian/libglib2.0-0.symbols:
    + Update with new symbols.
  * Standards-Version is 3.9.8. No changes needed.
.
glib2.0 (2.49.2-2) experimental; urgency=medium
.
  * d/p/0001-gsettings-test-Wrap-guint64-literals-in-G_GUINT64_CO.patch:
    Cherry-pick from upstream to fix test failure on non-64 bit arches.
.
glib2.0 (2.49.2-1) experimental; urgency=medium
.
  [ Emilio Pozuelo Monfort ]
  * Remove refdbg variant. Thanks to Jonny Lamb for the patch.
    Closes: #827269.
.
  [ Iain Lane ]
  * Update Vcs-* for experimental
  * New upstream release 2.49.2
    + GDesktopAppInfo now allows bus activation with dashes. This is not
      technically allowed per the Desktop Entry specification, but it happens
      in the wild. Rather than forcing people to go through another traumatic
      desktop file rename, accept it and translate - to _.
    + The support for giving names to threads has been improved. Thread names
      are now supported on Solaris as well, and the Linux support no longer
      uses prctl() but the pthread api.
    + GIO resources can now be overridden at runtime, using the
      G_RESOURCE_OVERLAYS environment variable.
    + gdbus-codegen can now generate autocleanup definitions for the types it
      generates. Use the --c-generate-autocleanup option to control this
    + GMainContext and GTask have gained more systemtap probes
  * debian/watch: Update to find unstable versions
  * debian/patches/04_homedir_env.patch: Refresh to apply correctly
  * debian/libglib2.0-0.symbols: Update for this release
.
glib2.0 (2.48.1-1) unstable; urgency=medium
.
  * New upstream release.
  * Refresh patches.
  * Drop obsolete Conflicts, Breaks and Replaces from pre-wheezy.
  * Drop obsolete preinst maintainer scripts which cleaned up the
    /usr/share/doc symlinks.
  * Drop version requirement for pkg-config dependency. (Closes: #734479)
.
glib2.0 (2.48.0-1) unstable; urgency=medium
.
  * New upstream stable release 2.48.0
    + a minor build fix in the name of determinism (Closes: #812876)
    + a few coverity fixes
.
glib2.0 (2.47.92-1) experimental; urgency=medium
.
  * New upstream release.
.
glib2.0 (2.47.6-1) experimental; urgency=medium
.
  * New upstream release.
    - GString is missing (transfer none) annotations on many of its methods
    - systemtap and gdb scripts install in wrong place
    - Documentation: various small improvements
    - gdbusobjectmanagerserver: Clarify recommended ObjectManager paths
    - Fix some annotations
    - Cannot build with default flags under Fedora rawhide
      (-Werror=format-nonliteral)
    - gmacros.h is testing attributes with __has_feature (when compiling with
      clang)
  * debian/libglib2.0-0-dbg.install.in: Upstream now installs the gdb
    auto-loaded scripts in the right place by themselves - no need for us to
    move them about.
.
glib2.0 (2.47.5-1) experimental; urgency=medium
.
  * debian/watch: Use download.gnome.org, seems ftp.gnome.org is not updating
    properly currently.
  * New upstream release 2.47.5
    + the system copy of PCRE is now used by default to implement GRegex.
      Configure with --with-pcre=internal if a system PCRE version
      is unavailable or undesired.
    + interfaces for DTLS support have been added. A new version of
      glib-networking will also be required.
    + GDBusMethodInvocation now drops replies if the sender set the
      NO_REPLY_EXPECTED flag
    + several GApplication fixes, including fixes for commandline arguments in
      interpreted languages on Windows
  * debian/libglib2.0-0.symbols: Update with new symbols for this release.
  * 0001-regex-test-expect-ASSERTION_EXPECTED-for-ab-with-PCR.patch: Drop,
    it's included in this release.
.
glib2.0 (2.47.4-1) experimental; urgency=medium
.
  * New upstream release
    + The GApplication documentation has been improved in several areas.
  * 0001-tests-fix-a-test-on-32-bit-builds.patch,
    0001-gtypes.h-move-G_STATIC_ASSERT-to-function-scope.patch: Drop, applied
    upstream in this release.
  * 0001-regex-test-expect-ASSERTION_EXPECTED-for-ab-with-PCR.patch: Fix regex
    tests to assert the right errors as of pcre 8.38. Cherry-pick from
    upstream. (Closes: #808842)
  * Don't build automatic dbgsym package for -refdbg
.
glib2.0 (2.47.3-3) experimental; urgency=medium
.
  * debian/patches/0001-gtypes.h-move-G_STATIC_ASSERT-to-function-scope.patch:
    Another cherry-pick. Should fix g-ir-scanner.
.
glib2.0 (2.47.3-2) experimental; urgency=medium
.
  * debian/patches/0001-tests-fix-a-test-on-32-bit-builds.patch: Cherry-pick
    from upstream. Fix tests (and therefore the build) on 32 bit arches.
.
glib2.0 (2.47.3-1) experimental; urgency=medium
.
  * New upstream release
    + New API: hardware-assisted helpers for overflow-checked integer math.
    + Fixes: Invalid free in g_local_file_trash() (LP: #1512826)
  * d/p/{Doc-copy-included-example-files.patch,
    Doc-Fix-missing-glibconfig.h-when-builddir-srcdir.patch,
    Build-gdbus-example-objectmanager-server-again.patch}: Remove - in this
    upstream release.
.
glib2.0 (2.47.1-1) experimental; urgency=medium
.
  * New upstream release.
    + The Unicode support has been updated to version 8.0 of the Unicode standard
    + GDesktopAppInfo no longer sets the DISPLAY environment variable when
      launching apps. This is now done in the GAppLaunchContext
      implementations when appropriate.
  * debian/watch: Look for development versions too.
  * debian/patches/90_gio-modules-multiarch-compat.patch: Refresh to apply on
    this version.
  * debian/patches/0001-GDateTime-test-fix-occasional-failures.patch: Drop,
    upstream in this release.
  * debian/libglib2.0-0.symbols: Update with new symbols for this release.
.
glib2.0 (2.46.2-3) unstable; urgency=medium
.
  * Add debian/patches/disable-failing-test-for-pcre838.patch
    - disable regexp test that fails with new system pcre 8.38
      which just hit Debian unstable. Needs further investigation
      but lets not leave the build broken during the holidays.
.
glib2.0 (2.46.2-2) unstable; urgency=medium
.
  [ Iain Lane ]
  * Fix typo in previous changelog entry.
.
  [ Andreas Henriksson ]
  * Add debian/patches/bug712848-volume-monitor-deadlock-kfreebsd.patch
    - patch by and big thanks to Steven Chamberlain for debugging this!
    - given lack of feedback from upstream, which would be very welcome
      for deep changes like this, use an ifdef to only change on
      *FreeBSD for now... (Closes: #712848)
  * Add --no-ddebs arg to dh_strip for refdbg package build which
    otherwise fails and I doubt we need ddeb/dbgsym for our debug
    package.
.
glib2.0 (2.46.2-1) unstable; urgency=medium
.
  * Fix Vcs-* to point to unstable.
  * New upstream stable release 2.46.2.
    + Fixes cross compilation (Closes: #800610)
  * Drop changes from 2.46.1-2, which are all in this upstream release.
  * Drop debian/patches/0001-GDateTime-test-fix-occasional-failures.patch,
    applied upstream.
.
glib2.0 (2.46.1-2) unstable; urgency=medium
.
  * Team upload.
  * Cherry-pick patches from upstream glib-2-46 branch to fix incomplete
    documentation (Closes: #659977)
  * debian/gdbus-example-objectmanager-server.c: add missing example file
    from upstream git; it was accidentally omitted from upstream tarballs
.
glib2.0 (2.46.1-1) unstable; urgency=medium
.
  [ Michael Biebl ]
  * Drop clean-la.mk from debian/rules, no longer required.
.
  [ Iain Lane ]
  * New upstream release 2.46.1
    + Remove system_header pragma (should fix lack of warnings with things
      like g_return_if_fail)
    + move GStrv typedef (and auto-cleanup) from libgobject to libglib
    + fix order of trashing files to be closer to what is required in the
      specification. Namely, trashinfo files are written first.  This should
      fix issues with the gvfs trash backend failing to correctly read the
      info for recently trashed files (preventing 'restore'). (Closes:
      #800491) (LP: #1495943)
    + tweak mime logic to return text/plain on all empty files instead of
      returning application/octet-stream.  This includes files that have
      extensions that imply that they may be other types of files, which is a
      slight change of behaviour with respect to old GLib versions. (LP:
      #1497170)
  * debian/patches/0001-Revert-list-store-Fix-a-parameter-check.patch: Drop -
    this is applied upstream in this release.
  * debian/patches/0001-GDateTime-test-fix-occasional-failures.patch: Take
    patch from bgo#754994 to resolve intermittent test failures in the
    GDateTime tests.
.
glib2.0 (2.46.0-2) unstable; urgency=medium
.
  * debian/patches/0001-Revert-list-store-Fix-a-parameter-check.patch:
    Cherry-pick from upstream to fix GSequence (this at least makes
    GStreamer's testsuite fail).
.
glib2.0 (2.46.0-1) unstable; urgency=medium
.
  [ Iain Lane ]
  * New upstream stable release 2.46.0
    + Disable runtime-deprecation warnings
    + Fix marshalling of flags on bigendian 64bit architectures
.
  [ Simon McVittie ]
  * Change section of libglib2.0-refdbg from debug to devel, so that it
    isn't kicked out into a separate mirror network when we get
    automatic -dbgsym packages (Closes: #796836)
.
glib2.0 (2.45.8-1) experimental; urgency=medium
.
  * New upstream development release.
  * Update debian/libglib2.0-0.symbols with one addition:
    g_param_spec_get_name_quark
.
glib2.0 (2.45.7-1) experimental; urgency=medium
.
  * New upstream release 2.45.7
    + Add G_FILE_ATTRIBUTE_STANDARD_IS_VOLATILE for use by non-POSIX-like
      backends (e.g. cloud storage).
    + GFileMonitor: Make the inotify backend work with atomic renames again
    + GSettings: change notification is again working unconditionally
    + GListStore has a sort function now
    + Test infrastructure:
     - Tests are now required to have unique names
     - TAP support has been improved
     - A macro for asserting that two memory regions have identical content
       has been added
  * debian/libglib2.0-0.symbols: Add new symbol for this release.
.
glib2.0 (2.45.6-1) experimental; urgency=medium
.
  * New upstream releases 2.45.5 and 2.45.6
    + GNetworkMonitor now provides information about metered networks
    + g_mem_set_vtable has been deprecated; it has not been working for quite
      a while. The recommendation is to use valgrind, or replace malloc
      itself.
  * debian/patches/0001-GOptionContext-Don-t-crash-without-main-group.patch:
    Drop, applied upstream.
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.45.4-2) experimental; urgency=medium
.
  * debian/patches/0001-GOptionContext-Don-t-crash-without-main-group.patch:
    Cherry-pick. Don't crash in GOptionContext if there's no main group. Fixes
    crash when running (for example) gdbus.
.
glib2.0 (2.45.4-1) experimental; urgency=medium
.
  * New upstream release 2.45.4
  * d/p/0001-gio-tests-appmonitor-Delete-file-before-checking-for.patch,
    d/p/0001-glocalfilemonitor-Send-DELETED-event-when-there-is-n.patch: Drop,
    applied upstream.
  * d/p/07_disable_tests_on_slow_archs.patch: Refresh to apply cleanly.
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.45.3-1) experimental; urgency=medium
.
  [ Simon McVittie ]
  * d/p/regex-if-PCRE-is-8.34-or-later-disable-auto-possessi.patch:
    mark as applied upstream in 2.45.3
.
  [ Iain Lane ]
  * New upstream release 2.45.3.
    + Improve performance of g_signal_handler_disconnect for signals
      with many handlers
    + GDBus has gained a new call flag to allow interactive authorization
    + GSettings:
     - New API: g_settings_schema_list_keys
     - Deprecated: g_settings_list_keys
  * debian/libglib2.0-0.symbols: Update with new symbols from this release.
  * debian/patches/regex-if-PCRE-is-8.34-or-later-disable-auto-possessi.patch:
    Delete, applied upstream.
  * d/p/0001-gio-tests-appmonitor-Delete-file-before-checking-for.patch:
    Cherry-pick upstream patch to fix testsuite failure causing FTBFS.
.
glib2.0 (2.45.2-1) experimental; urgency=medium
.
  [ Simon McVittie ]
  * Correctly attribute previous upload to Iain
  * d/p/0001-Fix-trashing-on-overlayfs.patch: add upstream bug reference
  * d/p/0001-glocalfilemonitor-Send-DELETED-event-when-there-is-n.patch:
    add upstream bug reference
  * d/p/10_kfreebsd_issetugid_prototype.patch,
    d/p/11_kfreebsd_pthread_condattr_setclock_prototype.patch,
    d/p/13_sparc_prlimit_prototype.patch:
    drop workarounds for #635205, #703545, #703559 which were all fixed
    in jessie
  * d/p/81-skip-monitor-test-on-non-linux.patch: add DEP-3 information
  * d/p/90_gio-modules-multiarch-compat.patch: add DEP-3 information
.
  [ Iain Lane ]
  * New upstream release 2.45.2
    + Improve error reporting in glib-compile-schemas.
    + Add introspection annotations to GListStore.
  * GDBus-tests-change-progress-noise-from-if-not-quiet-.patch,
    gdbus-tests-wait-up-to-60s-for-gdbus-testserver-to-t.patch,
    gdbus-connection-wait-up-to-10s-to-actually-send-a-m.patch,
    regex-test-do-not-assert-that-system-PCRE-still-has-.patch,
    gdbus-serialization-use-check_serialization-instead-.patch,
    gdbus-peer-test-let-GDBusServer-start-before-notifyi.patch,
    gdatetime-test-don-t-assume-that-time-stands-still.patch: Delete, applied
    upstream.
  * 07_disable_tests_on_slow_archs.patch: Refresh to defuzz
.
glib2.0 (2.45.1-2) experimental; urgency=medium
.
  [ Simon McVittie ]
  * d/p/regex-if-PCRE-is-8.34-or-later-disable-auto-possessi.patch:
    update to my latest version submitted upstream, which fixes undefined
    behaviour in the unlikely event that G_REGEX_OPTIMIZE is combined
    with g_regex_match_all().
  * d/p/regex-test-do-not-assert-that-system-PCRE-still-has-.patch:
    update to my latest version submitted upstream, which asserts that
    a newer-than-8.32 system PCRE does not have the bug in question.
  * d/p/gdbus-serialization-use-check_serialization-instead-.patch:
    add patch to fix FTBFS in non-minimal environments (libdbus-1-dev
    installed). Applied upstream for 2.45.2.
.
  [ Iain Lane ]
  * d/p/0001-Fix-trashing-on-overlayfs.patch: Take patch from
    upstream bug to fix trashing on overlayfs.
  * d/p/0001-glocalfilemonitor-Send-DELETED-event-when-there-is-n.patch: Take
    patch from upstream bug to send the right event when moving files outside
    a monitored directory.
.
glib2.0 (2.45.1-1) experimental; urgency=medium
.
  * New upstream release 2.45.1
    + The GSettings schema compiler, glib-compile-schemas has been changed
      to reject schema xml that has duplicate <summary> or <description>
      elements. Such elements typically occur when translations are merged
      into the schema, with xml:lang attributes. This is not the correct way
      to translate schemas. Instead keep the translations in the .mo file and
      set the gettext-domain attribute on the <schemalist> element. To avoid
      breaking already-installed schemas, this change is only taking effect
      when you use the --strict option.
    + The file monitoring infrastructure has been rewritten, and all backends
      have seen major improvements.
      + The inotify backend is reporting events with less delay (no event will
        be delayed more than 10ms) and wakeups due to file monitoring have
        been significantly reduced. A CHANGES_DONE event will also be sent
        when new files appear.
      + The poll implementation is now using the thread default main context.
      + The fam implmentation is now running in the worker thread.
      + The fen implementation has been removed, since it was unmaintained.
    + The hardcoded 10-thread limit of GTask's thread pool has been removed,
      since it was prone to causing deadlocks. The thread pool is now allowed
      to grow dynamically and will shrink back over time.
    + GSimpleAsyncResult has been deprecated in favor of GTask.
    + The algorithm used by GAppInfo to find default handlers for mime types
      has been tweaked to prefer apps that handle the specific subtype over
      default handlers for a generic supertype.
  * d/p/regex-test-do-not-assert-that-system-PCRE-allows-P-1.patch: Drop,
    applied upstream.
  * debian/control{,.in}: Update Vcs-* for experimental.
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.44.1-1) unstable; urgency=medium
.
  * New upstream release 2.44.1
    + Improve the default application algorithm
    + Bump the number of children a GType can have
    + Various testsuite improvements
.
glib2.0 (2.44.0-3) unstable; urgency=medium
.
  * Team upload.
.
  [ Simon McVittie ]
  * d/p/regex-test-do-not-assert-that-system-PCRE-allows-P-1.patch:
    update to the version that went upstream in 2.45.1. No functional change.
  * d/p/regex-if-PCRE-is-8.34-or-later-disable-auto-possessi.patch:
    update to my latest version submitted upstream, which fixes undefined
    behaviour in the unlikely event that G_REGEX_OPTIMIZE is combined
    with g_regex_match_all().
  * d/p/regex-test-do-not-assert-that-system-PCRE-still-has-.patch:
    update to my latest version submitted upstream, which asserts that
    a newer-than-8.32 system PCRE does not have the bug in question.
  * d/p/gdbus-serialization-use-check_serialization-instead-.patch:
    add patch to fix FTBFS in non-minimal environments (libdbus-1-dev
    installed). Applied upstream for 2.45.2.
  * d/p/gdbus-peer-test-let-GDBusServer-start-before-notifyi.patch:
    add patch fixing a race condition in the gdbus-peer test.
    Applied upstream for 2.45.2.
  * d/p/GDBus-tests-change-progress-noise-from-if-not-quiet-.patch:
    add patch fixing potential test failures caused by corrupt TAP
    output. Applied upstream for 2.45.2.
  * d/p/gdatetime-test-don-t-assume-that-time-stands-still.patch:
    add patch fixing potential test failures at the boundary between
    one second and the next. Applied upstream for 2.45.2.
  * d/p/10_kfreebsd_issetugid_prototype.patch,
    d/p/11_kfreebsd_pthread_condattr_setclock_prototype.patch,
    d/p/13_sparc_prlimit_prototype.patch:
    drop workarounds for #635205, #703545, #703559 which were all fixed
    in jessie
  * d/p/81-skip-monitor-test-on-non-linux.patch: add DEP-3 information
  * d/p/90_gio-modules-multiarch-compat.patch: add DEP-3 information
.
  [ Iain Lane ]
  * d/p/0001-Fix-trashing-on-overlayfs.patch: Take patch from
    upstream bug to fix trashing on overlayfs.
.
glib2.0 (2.44.0-2) unstable; urgency=medium
.
  * Upload to unstable.
  * debian/watch: Consider stable versions only.
.
glib2.0 (2.44.0-1) experimental; urgency=medium
.
  * New upstream release 2.44.0
    + gsocket: Document FD ownership with g_socket_new_from_fd()
.
glib2.0 (2.43.92-1) experimental; urgency=medium
.
  * New upstream release 2.43.92
    + GUnixMountMonitor now properly supports multiple main contexts
    + many documentation improvements and cleanups.
    + new support for HTTP proxies in GIO
    + new GTask:completed property
    + use "private" futexes in order to further improve the performance of the
      contended case of GMutex and g_bit_lock()
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.43.91-1) experimental; urgency=medium
.
  * New upstream release 2.43.91
    - We have now added 'g_autofree' as a libgsystem-style autocleanup macro
      that calls g_free() on the content of a local variable when it leaves
      scope (working only on GCC and clang).
    - GApplication now has an "is-busy" property, allowing one to query the
      effective busy state.
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.43.90-1) experimental; urgency=medium
.
  * New upstream release 2.43.90
    + new GSimpleIOStream class to construct a GIOStream from an arbitrary
      GInputStream and GOutputStream
    + GApplication: new API for marking 'busy' state according to the value of
      a boolean property on another object
    + GOptionGroup: add binding support (boxed type, annotation fixes, etc.)
  * debian/patches/gdbus-Let-the-pending-read-finish-before-closing-the.patch:
    Drop this cherry-pick from an upstream bug - should be fixed differently
    in this release (bgo #743990).
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.43.4-1) experimental; urgency=medium
.
  * New upstream release 2.43.4
    + GType now has type declaration macros G_DECLARE_DERIVABLE_TYPE,
      G_DECLARE_FINAL_TYPE and G_DECLARE_INTERFACE, which significantly reduce
      the boilerplate needed for GObject types and interfaces.
    + g_autoptr and g_auto are macros for declaring variables with automatic
      cleanup. They only work with gcc and clang.
    + GListModel is a new interface that represents a dynamic list of GObjects.
    + GListStore is a GSequence-based implementation of GListModel.
    + g_simple_action_set_state_hint: New function to set the state hint of
      GSimpleActions
    + g_settings_schema_list_children and g_settings_schema_key_get_name are
      new functions to complete the GSettingsSchema API.
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.43.3-1) experimental; urgency=medium
.
  [ Laurent Bigonville ]
  * debian/control.in, debian/libglib2.0-dev.install.in,
    debian/libglib2.0-0-dbg.install.in: Install the gdb python scripts in the
    proper locations, move them to the -dbg package and add the needed
    Breaks/Replaces (Closes: #774024)
.
  [ Iain Lane ]
  * New upstream release 2.43.3
    + add g_set_object() convenience function
    + GNetworkMonitor: check if NM is not running and don't crash
    + fix some races with g_mkdir_with_parents
    + avoid use of G_STRLOC in G_OBJECT_WARN_INVALID_PSPEC in order to save on
      static strings
    + fix some content type vs. mime issues
  * 07_disable_tests_on_slow_archs.patch: Refresh
.
glib2.0 (2.43.2-1) experimental; urgency=medium
.
  [ Laurent Bigonville ]
  * debian/control.in: Switch build-dependency from libelfg0-dev to libelf-dev
    (Closes: #769408)
.
  [ Iain Lane ]
  * New upstream release 2.43.2
    + New function: g_strv_contains
    + New function: g_network_address_new_loopback
    + New function: g_socket_send_messages
    + A new GNetworkMonitor implementation using NetworkManager provides more
      detailed connectivity information
  * 0001-GSettings-fix-check-for-delaying-backend-subscriptio.patch,
    0001-gmain-fix-poll-record-comparison.patch: gmain: fix the sorting of:
    Drop, applied in this release.
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.43.1-2) experimental; urgency=medium
.
  * 0001-GSettings-fix-check-for-delaying-backend-subscriptio.patch:
    Cherry-pick patch from upstream. Check signal detail too when looking for
    pending signal handlers, so that subscribing to changed signals with a
    detail works again.
  * 0001-gmain-fix-poll-record-comparison.patch: gmain: fix the sorting of
    poll records. Resolves FTBFS on ppc64el.
.
glib2.0 (2.43.1-1) experimental; urgency=medium
.
  * New upstream release 2.43.1, changes since 2.42.1:
    + GQueue now accepts NULL as a sibling in g_queue_insert_before() and
      g_queue_insert_after()
    + GObject gained a debug option to provide instance counts. To use it, set
      GOBJECT_DEBUG=instance-count and call g_type_get_instance_count().
    + GOption now has a strict POSIX mode in which it stops parsing arguments
      as soon as a non-option argument is encountered.
  * debian/control{,.in}: Bump Standards-Version to 3.9.6, no changes
    required.
  * debian/libglib2.0-0.symbols: Add new symbols for this release.
.
glib2.0 (2.42.1-1) unstable; urgency=medium
.
  [ Iain Lane ]
  * Pass --enable-debug=minimum not minimal - this is what configure.ac
    expects.
.
  [ Emilio Pozuelo Monfort ]
  * New upstream bugfix release.
  * d/p/0001-properties-disable-default-deprecation-warnings.patch:
    + Removed, merged upstream.
.
glib2.0 (2.42.0-2) unstable; urgency=medium
.
  [ Andreas Henriksson ]
  * Update Vcs-* to use unstable instead of experimental branch
.
  [ Iain Lane ]
  * 0001-properties-disable-default-deprecation-warnings.patch: Backport from
    upstream stable branch - silences warnings that are shown to users on
    stderr, and which also cause some testsuite failures and consequent FTBFS.
.
glib2.0 (2.42.0-1) unstable; urgency=medium
.
  * New upstream release
.
glib2.0 (2.41.5-2) unstable; urgency=medium
.
  * Upload to unstable.
.
glib2.0 (2.41.5-1) experimental; urgency=medium
.
  [ Andreas Henriksson ]
  * Make libglib2.0-0 recommend xdg-user-dirs
    - needed to set up ~/.config/user-dirs.dirs to get default XDG_*_DIR set.
.
  [ Iain Lane ]
  * New upstream release 2.41.5
    - GDesktopAppInfo: avoid polling on missing desktop dirs
.
glib2.0 (2.41.4-1) experimental; urgency=medium
.
  * New upstream release
  * debian/libglib2.0-0.symbols:
    + Add g_application_add_main_option symbol
.
glib2.0 (2.41.3-1) experimental; urgency=medium
.
  * New upstream release 2.41.3
  * debian/tests/installed-tests: Revert the previous change - require dbus >=
    1.8 and always use dbus-run-session.
.
glib2.0 (2.41.2-1) experimental; urgency=medium
.
  * New upstream release
    - The Unicode support has been updated to version 7.0 of the Unicode
      standard
    - GNotification now supports priorities for notifications
    - GMutex now uses a faster, native implementation on Linux
  * 0001-gvariant-tests-workaround-libc-compiler-issue.patch: Drop, applied
    upstream in this release.
  * Add new symbols for this release.
  * Merge in changes from 2.40.0-4
    + Adapt for system pcre3/1:8.35 (Closes: #755439):
      - a PCRE 8.31 bug in case-insensitivity has been fixed, so do not assert
        bug-for-bug compatibility with 8.31
      - named match groups' names cannot start with a digit any more, so
        (?P<1>.) is no longer allowed; do not assert that it is
      - turn off a new optimization that would reduce the result set when
        called from g_match_all(_full), to preserve existing functionality
    + Build-depend on pcre3/1:8.35 so that the new optimization is
      known to be turned off in the built binaries
    + Add patch from upstream to fix mis-optimization in gvariant test
      with gcc 4.9 (Closes: #756272)
    + Avoid using dbus-launch for regression tests (Closes: #737488):
      - run installed-tests under dbus-run-session from dbus (>= 1.8)
      - do not run build-time tests under dbus-launch: those that use D-Bus
        all create their own session bus instances now
        (i.e. remove 05_run-gio-tests-with-a-dbus-session.patch)
      - set a deliberately invalid DBUS_SESSION_BUS_ADDRESS to make sure
        nothing in the build is still inheriting it from the environment
    + Override Lintian false positive #733733: we build-depend on python:any
      but Lintian doesn't yet understand :any syntax
  * Make the installed tests still run dbus-launch if we don't have
    dbus-run-session (i.e. if the installed dbus is << 1.8).
.
glib2.0 (2.41.1-2) experimental; urgency=medium
.
  * 0001-gvariant-tests-workaround-libc-compiler-issue.patch: Cherry-pick
    patch from upstream to fix/workaround a new compiler optimisation in
    gcc-4.9 which occurs when passing a null pointer / zero size to memcmp.
    Should fix FTBFS on many arches in unstable.
.
glib2.0 (2.41.1-1) experimental; urgency=medium
.
  * New upstream release
  * 0001-Prevent-an-invalid-CARBON_LIBS-from-appearing-in-the.patch: Drop,
    included in this release.
  * Update symbols file with the new symbol in this release.
.
glib2.0 (2.41.0-2) experimental; urgency=medium
.
  [ Andreas Henriksson ]
  * Bump python:any build-dependency to >= 2.7.5-5~ (Closes: #747928)
.
  [ Emilio Pozuelo Monfort ]
  * Use the default compiler on sparc, since it's already >> 4.7.
    Closes: #751313.
.
  [ Iain Lane ]
  * 0001-Prevent-an-invalid-CARBON_LIBS-from-appearing-in-the.patch:
    Cherry-pick patch from upstream to fix an invalid "@CARBON_LIBS@" token
    appearing in Libs.private in the pcfile. (LP: #1330033)
.
glib2.0 (2.41.0-1) experimental; urgency=medium
.
  [ Emilio Pozuelo Monfort ]
  * debian/libglib2.0-doc.links:
    + The symlink for the gtk docs is broken at the moment, and even if
      fixed, it will still be broken if libgtk2.0-doc isn't installed on
      a system, so just drop it. Closes: #746782.
.
  [ Iain Lane ]
  * New upstream release 2.41.0
    - Many bugfixes found by static analysis, including potential fd leaks and
      NULL pointer dereferences.
    - Increased use of (nullable) attribute on out values and return types now
      that it is supported (mostly from porting Vala metadata).
    - use XDG_CURRENT_DESKTOP for OnlyShowIn/NotShowIn handling of desktop
      files, deprecating g_desktop_app_info_set_desktop_env()
    - add support for g_desktop_app_info_get_implementations() to find desktop
      files that have an Implements= line for a given interface
    - GHmac has gained SHA-512 support
    - support the new mimeapps specification (most notably, moving the
      assoications/defaults configuration to ~/.config/mimeapps.list).
    - libgobject is now linked -Wl,-z,nodelete when possible to avoid errors
      when gobject is used from a module for a program that does not itself use
      gobject and that module is unloaded/reloaded
  * debian/watch: Use http://ftp.gnome.org; it's more up-to-date.
  * Update symbols file with new symbols for this release.
.
glib2.0 (2.40.0-4) unstable; urgency=medium
.
  * Team upload
.
  [ Emilio Pozuelo Monfort ]
  * Use the default compiler on sparc, since it's already >> 4.7.
    Closes: #751313.
.
  [ Iain Lane ]
  * Fix Vcs-* for the unstable branches
.
  [ Simon McVittie ]
  * Adapt for system pcre3/1:8.35 (Closes: #755439):
    - a PCRE 8.31 bug in case-insensitivity has been fixed, so do not assert
      bug-for-bug compatibility with 8.31
    - named match groups' names cannot start with a digit any more, so
      (?P<1>.) is no longer allowed; do not assert that it is
    - turn off a new optimization that would reduce the result set when called
      from g_match_all(_full), to preserve existing functionality
  * Build-depend on pcre3/1:8.35 so that the new optimization is
    known to be turned off in the built binaries
  * Add patch from upstream to fix mis-optimization in gvariant test
    with gcc 4.9 (Closes: #756272)
  * Avoid using dbus-launch for regression tests (Closes: #737488):
    - run installed-tests under dbus-run-session from dbus (>= 1.8)
    - do not run build-time tests under dbus-launch: those that use D-Bus
      all create their own session bus instances now
      (i.e. remove 05_run-gio-tests-with-a-dbus-session.patch)
    - set a deliberately invalid DBUS_SESSION_BUS_ADDRESS to make sure
      nothing in the build is still inheriting it from the environment
  * Override Lintian false positive #733733: we build-depend on python:any
    but Lintian doesn't yet understand :any syntax
.
glib2.0 (2.40.0-3) unstable; urgency=medium
.
  [ Rico Tzschichholz ]
  * debian/libglib2.0-bin.install:
    - Install /usr/bin/gapplication
.
glib2.0 (2.40.0-2) unstable; urgency=medium
.
  [ Iain Lane ]
  * gdbus-tests-wait-up-to-60s-for-gdbus-testserver-to-t.patch: Take latest
    version from upstream bug to resolve some test failures.
  * Add xauth test-dep, needed for xvfb-run
.
  [ Emilio Pozuelo Monfort ]
  * Upload to unstable.
.
glib2.0 (2.40.0-1) experimental; urgency=medium
.
  * New upstream release.
.
glib2.0 (2.39.92-2) experimental; urgency=medium
.
  * test_timer_basic is still broken. Skip it.
.
glib2.0 (2.39.92-1) experimental; urgency=medium
.
  * New upstream release.
  * 0001-timer-test-use-volatile-for-locals.patch: Take patch from bgo #722604
    to workaround gcc's intentional spec violation in the timer tests.
    + Remove debian/patches/80-skip-timer-test.patch accordingly; it should
      now work.
.
glib2.0 (2.39.91-1) experimental; urgency=medium
.
  * New upstream release.
  * d/p/0001-asyncqueue-fix-timeout-math-on-32bit-systems.patch:
    + Dropped, merged upstream.
  * debian/patches/81-skip-monitor-test-on-non-linux.patch:
    + New patch, skip the monitor test on non-linux as it currently hangs.
  * debian/libglib2.0-0.symbols:
    + Add a new symbol.
.
glib2.0 (2.39.90-2) experimental; urgency=medium
.
  * debian/control.in:
    + Bump gtk-doc-tools build-dependency per configure.ac.
  * debian/patches/Don-t-use-a-parallel-build-for-the-documentation.patch:
    + Removed, no longer needed with gtk-doc 1.20.
  * d/p/0001-asyncqueue-fix-timeout-math-on-32bit-systems.patch:
    + Patch from git, fix an overflow in g_async_queue_timed_pop_unlocked
      on 32 bits systems.
  * debian/patches/80-skip-timer-test.patch:
    + Skip the timer test which currently fails on x86 because of float
      precission errors.
  * debian/rules:
    + Make the test suite fatal on linux.
    + Run the test suite on !linux, but ignore test suite errors for now.
.
glib2.0 (2.39.90-1) experimental; urgency=medium
.
  * New upstream release.
  * Drop patches now included in upstream release:
    - 0001-glib-tests-collate.c-run-to-completion-when-skipping.patch
    - 0002-g_test_run-return-0-if-all-tests-are-skipped-in-TAP-.patch
  * Fix fuzz to make debian/patches/04_homedir_env.patch apply again.
  * Use quilt to refresh remaining patches.
  * debian/libglib2.0-0.symbols: Add new symbols.
.
glib2.0 (2.39.4-1) experimental; urgency=medium
.
  * New upstream development release.
  * debian/rules:
    + Tell dh_clean not to remove org.gtk.test.gschema.xml.orig, otherwise
      the build fails as that fail is missing. Apparently dh_clean removes
      everything that ends with .orig.
  * debian/libglib2.0-0.symbols:
    + Add new symbols.
  * d/p/valgrind_h_add_r0_to_the_clobber_list_on_PPC.patch,
    d/p/tests-move-param-implement-to-m-slow.patch,
    d/p/Fix-races-in-unix-signal-dispatch.patch:
    + Dropped, applied upstream.
  * d/p/0001-glib-tests-collate.c-run-to-completion-when-skipping.patch,
    d/p/0002-g_test_run-return-0-if-all-tests-are-skipped-in-TAP-.patch:
    + Add patches from upstream to fix test suite errors.
  * debian/patches/*:
    + Refreshed.
  * debian/rules:
    + Don't run the test suite in parallel as some tests fail otherwise.
    + Ignore test suite errors for now. There are a few known racy tests
      that fail randomly, and I'm more interested in whether glib builds
      fine everywhere. We should make the tests fatal again before 2.40.
.
glib2.0 (2.38.2-5) unstable; urgency=medium
.
  * Upload to unstable.
.
glib2.0 (2.38.2-4) experimental; urgency=medium
.
  * Team upload
  * DEP-3: tag patch for Debian#737501 as sent upstream to GNOME#723653
  * d/p/gdbus-Let-the-pending-read-finish-before-closing-the.patch:
    add patch from Mikhail Zabaluev fixing a test failure on mips,
    also reproduced on mipsel (Closes: #738290)
  * d/p/Fix-races-in-unix-signal-dispatch.patch: add patch from upstream
    to fix what appears to be the root cause of #737380
  * d/p/gdbus-tests-wait-up-to-60s-for-gdbus-testserver-to-t.patch,
    d/p/gdbus-connection-wait-up-to-10s-to-actually-send-a-m.patch:
    improve arbitrary timeouts in regression tests, fixing an unreported
    FTBFS on armhf
.
glib2.0 (2.38.2-3) experimental; urgency=medium
.
  * Team upload
  * d/p/Don-t-use-a-parallel-build-for-the-documentation.patch:
    Disable parallel build for the documentation, hopefully fixing an
    intermittent FTBFS in which gtk-doc tries to scan Windows-specific
    objects (Closes: #737501)
  * d/p/Do-not-attempt-to-autolaunch-a-session-dbus-daemon-w.patch:
    Refuse to perform D-Bus "autolaunch" if $DISPLAY is unset, in which
    case it isn't going to work anyway. This works around a process-launching
    issue in the GApplication test on mipsel (Closes: #737380)
  * Bump debhelper compat level to 9, resulting in co-installable
    multiarch debug symbols and ~ 50% smaller installed size
    for libglib2.0-0-dbg (at the cost of ~ 30% larger .deb size)
    - mark libglib2.0-0-dbg Multi-Arch: same
.
glib2.0 (2.38.2-2) experimental; urgency=medium
.
  * Team upload.
.
  [ Emilio Pozuelo Monfort ]
  * debian/rules:
    + Enable parallel builds.
.
  [ Laurent Bigonville ]
  * Add d/p/valgrind_h_add_r0_to_the_clobber_list_on_PPC.patch: Fix FTBFS on
    PPC (taken from upstream, Closes: #737379)
.
  [ Simon McVittie ]
  * Add DEP-3 tagging to PPC patch
  * Add d/p/tests-move-param-implement-to-m-slow.patch to knock out
    test /param/implement, which upstream describe as "essentially a
    forkbomb", leading to failures on armel and at least sporadically
    on mipsel (Closes: #737381)
.
glib2.0 (2.38.2-1) experimental; urgency=low
.
  * New upstream release
    - Drop d/p/0001-g_file_copy-Fall-back-to-pathname-queryinfo-to-help-.patch
      merged upstream
  * debian/control.in:
    - Bump Standards-Version to 3.9.5 (no further changes)
    - Use canonical URL for Vcs-Svn field
.
glib2.0 (2.38.1-2) experimental; urgency=low
.
  * debian/rules:
    + Set VERBOSE so we get failing tests' stdout and stderr. This will
      help us debug the various build failures in different arches.
.
glib2.0 (2.38.1-1) experimental; urgency=low
.
  * Build-Depend on python:any. python is Multi-Arch: allowed; this BD allows
    the python from any architecture that can be executed on the builder to
    satisfy the BD, simplifying cross building of glib2.0.
  * New upstream bugfix release 2.38.1
    + Fix error code checks when SOCK_CLOEXEC is defined but not supported
      (fix support for GNU/Hurd)
    + g_settings_list_children: only list viable schemas (fix gsettings
      list-recursively crashes with invalid schemas installed)
    + GDBusObjectManagerClient: Fix typo in the /org/freedesktop/DBus path
      when adding match rules
      - Remove 0001-gio-Fix-typo-in-the-org-freedesktop-DBus-path.patch
  * 0001-g_file_copy-Fall-back-to-pathname-queryinfo-to-help-.patch:
    Cherry-pick gio patch to fall back to g_file_query_info if
    query_info_on_read is not supported. Fixes copying from backends that
    don't implement the latter. (Closes: #715436, LP: #1217230)
.
glib2.0 (2.38.0-1) experimental; urgency=low
.
  * New upstream release
  * debian/patches/0001-gio-Fix-typo-in-the-org-freedesktop-DBus-path.patch:
    Cherry-pick patch from upstream to fix object path typo in gio (LP:
    #1227295)
  * Add --enable-debug=minimal explicitly to the deb build so the debugging
    level doesn't change between pre-release and stable versions.
.
glib2.0 (2.37.93-1) experimental; urgency=low
.
  * New upstream release 2.37.93 (& .92)
    + new API g_file_measure_disk_usage() similar to du(1)
  * Add new symbols for g_file_measure_disk_usage API added in this release.
.
glib2.0 (2.37.7-1) experimental; urgency=low
.
  * New upstream 2.37.7
    + GDateTime now supports %:z formatting variations for timezones. This is
    a GNU date extension.
.
glib2.0 (2.37.6-1) experimental; urgency=low
.
  * New upstream release 2.37.6
  * Update symbols file
  * Merge changes from unstable, mainly for build / testsuite fixes.
.
glib2.0 (2.37.5-1) experimental; urgency=low
.
  * New upstream release 2.37.5 (including interesting changes from .3 and .4)
    + Implement the Desktop Action specification
    + The gsettings tool now reports failure to write a key (e.g. because the
      key was locked down)
    + add a new API for instance private data: G_DEFINE_TYPE_WITH_PRIVATE
    + add new D-Bus API for async property handling
  * libglib2.0-tests: Depend on shared-mime-info required by contenttype test.
  * New upstream release
  * 0001-Revert-g_file_set_contents-don-t-fsync-on-ext3-4.patch: Drop, now
    upstream.
  * debian/tests/installed-tests: Add a new DEP-8 test to run the
    installed-tests.
  * Refresh patches.
  * Update symbols file.
  * debian/patches/skip-brokwn-dbus-appinfo-test.patch: Skip a broken new
    dbus-appinfo test which is hanging.
.
glib2.0 (2.37.2-1) experimental; urgency=low
.
  * New upstream version
    + add support for installed tests:
      https://live.gnome.org/GnomeGoals/InstalledTests
    + add a new g_test_trap_subprocess() that works on Windows as a
      replacement for the (now deprecated) g_test_trap_fork()
    + support for explicitly cancelling a gobject property binding
    + performance improvements for signal argument handling
    + stop using `quotes' in very many log messages generated by GLib, for
      favour of 'this style'.  This may cause testcases in other packages to
      fail if they were matching on the previous text.
    + improve manpages: add missing arguments and flags
    + Installing properties after class initialization is deprecated, and will
      trigger a warning.
    + GApplication Support org.freedesktop.Application, including D-Bus
      activation from desktop files
  * Refresh patches.
  * Update symbols file with new symbols in this release.
  * Enable installed tests and install into a libglib2.0-tests package.
  * clean debian/{install,build,stamp-makefile-check} and
    gio/gdbus-2.0/codegen/*.pyc
  * Set $XDG_RUNTIME_DIR to a writable directory we control; now required by
    the testsuite.
.
glib2.0 (2.36.4-1) unstable; urgency=low
.
  * New upstream release.
  * Remove 0001-Revert-g_file_set_contents-don-t-fsync-on-ext3-4.patch, merged
    upstream.
  * Make test suite linux only again. On kfreebsd the test suite keeps getting
    stuck and the build is killed after a timeout.
.
glib2.0 (2.36.3-4) unstable; urgency=low
.
  [ Josselin Mouette ]
  * Still run the testsuite on !linux, even though non-fatal.
.
  [ Michael Biebl ]
  * Track stable releases.
  * Use dh_python2 to properly generate the dependencies for gdbus-codegen,
    which is shipped in libglib2.0-dev.
.
glib2.0 (2.36.3-3) unstable; urgency=low
.
  [ Julien Cristau ]
  * Use gcc-4.8 on sparc to fix misbuild causing test failure (closes: #709781).
.
  [ Josselin Mouette ]
  * Only make the testsuite fatal on linux. Although the other
    architectures don’t pass, we have to keep a pair of reverse
    dependencies working.
.
glib2.0 (2.36.3-2) unstable; urgency=low
.
  * 0001-Revert-g_file_set_contents-don-t-fsync-on-ext3-4.patch:
    + Patch from the upstream 2.36 stable branch. Revert a previous
      commit that dropped calls to fsync() on ext[234] fileystems as
      that caused data corruption in some cases (e.g. corrupted dconf
      db on power loss).
.
glib2.0 (2.36.3-1) unstable; urgency=low
.
  [ Josselin Mouette ]
  * Make the testsuite fatal on all architectures. If it fails, we need
    to fix it or drop the architecture, not to ignore it.
  * Break libgnome-desktop-3-2 < 3.4.2-2 for the thumbnails location
    change.
.
  [ Emilio Pozuelo Monfort ]
  * New upstream bugfix release. Closes: #708568.
  * debian/patches/13_sparc_prlimit_prototype.patch:
    + Refreshed.
.
glib2.0 (2.36.1-2) unstable; urgency=low
.
  * Merge experimental branch, upload to unstable.
.
glib2.0 (2.36.1-1) experimental; urgency=low
.
  * New upstream release
  * Refresh debian/patches/06_thread_test_ignore_prctl_fail.patch
.
glib2.0 (2.36.0-2) experimental; urgency=low
.
  * debian/rules:
    + Don't abort the build if the test suite fails on mipsel.
  * debian/patches/17_check_abis_mips_symbols.patch:
    + Also allow _ftext in libgthread.
.
glib2.0 (2.36.0-1) experimental; urgency=low
.
  * New upstream release.
    + debian/libglib2.0-0.symbols:
      - Updated.
  * debian/rules:
    + Make the test suite fatal in armel and armhf.
  * debian/patches/17_check_abis_mips_symbols.patch:
    + Add _ftext to the list of allowed symbols, since that
      is leaked on mips.
.
glib2.0 (2.35.9-2) experimental; urgency=low
.
  * d/p/11_kfreebsd_pthread_condattr_setclock_prototype.patch:
    + Another patch to fix the build on kfreebsd. Add a prototype
      for pthread_condattr_setclock() when building on kfreebsd
      since the prototype there is missing. The glibc bug to add
      the missing prototype is #703545, we can remove this hack
      when that is fixed.
  * debian/patches/13_sparc_prlimit_prototype.patch:
    + New patch, only use prlimit if the prototype is available.
      Should fix the build on sparc where prlimit is available but
      the prototype is missing. Thanks to Julien Cristau for the
      patch. This works-around #703559 and can be removed when that
      bug is fixed.
  * debian/patches/15_gio_desktop_app_info_test_bin_true_path.patch:
    + Change path for 'true' to /bin/true as that's where it is in
      Debian. This fixes a testcase that was failing on every arch
      and was causing the build to fail on ia64 and powerpc as test
      failures are fatal on those arches.
  * debian/rules:
    + Use filter instead of findstring to match the current arch
      against the list of architectures where the test suite should
      not be fatal, as the latter matches substrings and so it was
      making the testsuite non-fatal on amd64 and i386 because they
      match kfreebsd-amd64 and kfreebsd-i386.
.
glib2.0 (2.35.9-1) experimental; urgency=low
.
  * debian/control.in:
    + Break python-gi (<< 3.7.2). Closes: #702603.
  * New upstream release.
    + debian/patches/04_homedir_env.patch:
      - Updated to apply again.
  * debian/rules:
    + Set HOME instead G_HOME, as GLib now honors the former. We will
      eventually remove our local patch to support G_HOME, so packages
      that need to override the home directory for the test suite should
      switch to overriding HOME.
  * debian/libglib2.0-0.symbols:
    + Bump minimum version for g_get_home_dir() so that users that need
      HOME to be honored get a proper runtime dependency.
  * debian/patches/10_kfreebsd_issetugid_prototype.patch:
    + Untested patch to fix the build on kfreebsd.
.
glib2.0 (2.35.8-1) experimental; urgency=low
.
  [ Matthias Klose ]
  * Configure cross builds with --disable-modular-tests --disable-gtk-doc.
.
  [ Iain Lane ]
  * Merges from unstable branch (Michael Biebl)
    - Take into account multiarch when removing the cache files in postrm:
      Remove /usr/lib/gio/modules/giomodule.cache only for the native
      architecture for which this cache file was created.
      After removing /usr/share/glib-2.0/schemas/gschemas.compiled on purge,
      run dpkg-trigger explicitly, so in case libglib2.0-0 is installed for
      other architectures, the cache file is re-created. (Closes: #696389)
    - Drop the various Breaks from libglib2.0-0. Those are causing APT to
      fail on a dist-upgrade from squeeze to wheezy. (Closes: #676485)
  * Refresh patches and slightly rework debian/patches/04_homedir_env.patch:
    g_get_home_dir() now respects the HOME environment variable but we'll keep
    G_HOME for now as packages in Debian rely on it.
  * gdbus-codegen .py files have moved to /usr/share/glib-2.0
  * Update symbols file
.
  [ Martin Pitt ]
  * New upstream release 2.35.4
  * debian/libglib2.0-0.symbols: Update for new upstream release.
  * Drop 08_disable_gapplication_basic_test.patch, test is now more robust.
  * Drop 92_revert_appinfo_command_line.patch and add xterm build dependency;
    xterm is rather lightweight in terms of dependencies and is sufficient to
    run all the "Terminal=true" tests.
  * Add 08_fix_closure_invalidation.patch: gsignal: fix closure invalidation
    code. (GNOME #690118)
.
  [ Emilio Pozuelo Monfort ]
  * New upstream release 2.35.8.
    + debian/patches/08_fix_closure_invalidation.patch:
      - Removed, applied upstream.
    + debian/patches/*:
      - Refreshed.
    + debian/libglib2.0-0.symbols:
      - Updated for the new symbols.
.
glib2.0 (2.34.3-1) experimental; urgency=low
.
  * New upstream release.
.
glib2.0 (2.34.2-1) experimental; urgency=low
.
  * Team upload
.
  [ Martin Pitt ]
  * debian/rules: Re-enable failing the build on failed tests on armel/armhf
    on Ubuntu, now that the buildds behave themselves again.
.
  [ Simon McVittie ]
  * New upstream release
    - 50_git_gmenuexporter_allow_null_bus_on_name_vanished.patch: remove,
      applied upstream
    - 91_kfreebsd_credentials.patch: remove, applied upstream
  * Override a couple of package-contains-empty-directory lintian tags
    for deliberate empty directories
  * Override package-contains-devhelp-file-without-symlink lintian tag
    for gdbus-object-manager-example, which is deliberately not in devhelp
.
glib2.0 (2.34.1-2) experimental; urgency=low
.
  * Team upload
  * Apply patch from unstable to use the FreeBSD credentials-passing code
    path on kFreeBSD too, fixing (at least) gnome-terminal and lightdm on
    kFreeBSD (Closes: #581750, #631968)
.
glib2.0 (2.34.1-1) experimental; urgency=low
.
  [ Josselin Mouette ]
  * Require libelfg0-dev, not libelf-dev which has nothing to do with
    it.
.
  [ Iain Lane ]
  * New upstream release
    + GTimeZone support for zoneinfo version 1
    + Leak in glib-compile-resources
    + g_settings_bind: use canonical property name
    + Port gio tests from pygobject to pygi
  * Switch python-gobject-2 BD to python-gi, folowing porting of tests.
  * debian/patches/50_git_gmenuexporter_allow_null_bus_on_name_vanished.patch:
    Cherry-pick upstream patch to fix crash when GBusNameVanishedCallback is
    called with a NULL GDBusConnection. (LP: #1044322)
.
glib2.0 (2.34.0-1) experimental; urgency=low
.
  [ Martin Pitt ]
  * debian/rules: Only run tests for the main flavour; it takes too
    long for all three and does not give us a lot of extra confidence.
  * debian/rules: Manually create debian/stamp-makefile-check, as with above
    change it's not created automatically any more.
  * Add 07_disable_tests_on_slow_archs.patch: Disable tests on slow
    architectures which keep failing the tests. These are currently
    /socket/timed_wait, /mainloop/timeouts, /mainloop/child_sources,
    /timeout/rounding, and the upper bound on /gdbus/method-calls-in-thread on
    ARM platforms.
  * debian/control.in: Bump pcre dependency to >= 1:8.31.
  * debian/rules: Seems there is no way of making the test suite work reliably
    with the upgraded Ubuntu ARM builders, so make tests non-fatal on
    arm{el,hf} until they get less swap happy.
.
  [ Michael Biebl ]
  * New upstream release.
  * Drop debian/patches/91_revert_pcre_8.31_test.patch now that we have a
    recent enough version.
.
glib2.0 (2.33.14-1) experimental; urgency=low
.
  [ Iain Lane ]
  * New upstream release
    + CVE-2012-3524: don't run dbus-launch from setuid binaries
    + g_content_type_get_generic_icon_name(): new API for getting the icon
      name for a mime type
    + Introspection fixes:
      - GDBusConnection nullability fixes
      - give a box type to GTimeZone
    + Drop GVFS_INOTIFY_DIAG
    + Add a new "Writing GLib Applications" section to the reference
      documentation with general info on security, threads, etc.
    + gwin32mount.c: Fix syntax error
    + gresource tests: srcdir != builddir fixes
    + tests/gvariant: Fix test on big endian architectures
    + Fix regression in g_shell_parse_argv()
  * Dropped 07_tests_gvariant_big_endian.patch: applied upstream.
.
  [ Michael Biebl ]
  * Bump all 2.33.x symbol versions to 2.33.14 to ensure a tight enough
    dependency for packages using features from glib 2.33.
.
glib2.0 (2.33.12-4) experimental; urgency=low
.
  * debian/patches/03_disble_glib_compile_schemas_warning.patch: Add a new
    patch to disable a warning when compiling schemas which are installed into
    'deprecated' locations. Users see this very often due to
    glib-compile-schemas being called from libglib2.0-0's trigger and it is
    not very useful for them.
.
glib2.0 (2.33.12-3) experimental; urgency=low
.
  * debian/control.in: Add Breaks: too glib-networking versions prior to
    2.33.12. (LP: #1046319)
  * debian/rules: Ignore test case failures on hurd-i386 (not a release
    architecture) and mips (this keeps tripping over a gdbus test race
    condition).
  * Replace 07_disable_gvariant_checksum_tests.patch with
    07_tests_gvariant_big_endian.patch which fixes the test properly instead
    of disabling it. Taken from
    https://bugzilla.gnome.org/show_bug.cgi?id=683384
.
glib2.0 (2.33.12-2) experimental; urgency=low
.
  * Drop 10_increase_gapplication_test_delay.patch. We disable the whole test
    now anyway (08_disable_gapplication_basic_test.patch).
  * Add 07_disable_gvariant_checksum_tests.patch: 2.33.12 introduced two new
    checks for GVariant checksum stability. This does not currently work on
    big-endian machines (https://bugzilla.gnome.org/show_bug.cgi?id=683384),
    so disable these tests for now.
.
glib2.0 (2.33.12-1) experimental; urgency=low
.
  [ Sebastien Bacher ]
  * New upstream version
  * debian/libglib2.0-0.symbols:
    - updated
  * revert_g_file_make_directory_with_parents_error_propagation.patch:
    - dropped, the issue is fixed in the new version
  * debian/patches/92_revert_appinfo_command_line.patch:
    - don't require a vte for test, we don't want an xorg stack there
.
  [ Iain Lane ]
  * Add revert_g_file_make_directory_with_parents_error_propagation.patch:
    This reverts upstream commit b0bce4ad41937dabf7e5c94dcce3caf4e88f3f97
    which caused applications to segfault. The proper fix will be in the next
    glib release, so this patch should be dropped then. (LP: #1035688)
.
  [ Martin Pitt ]
  * Add 07_test_method_calls_on_proxy_bump_max_time.patch: On slower
    platforms, the overhead of the 240 D-BUS Sleep calls is larger than
    the current maximum of 6 seconds. Bump maximum time to 8 seconds to be
    more resilient to this.
  * Add 08_disable_gapplication_basic_test.patch: Disable /gapplication/basic
    test. It's full of race conditions and keeps breaking builds.
.
  [ Robert Ancell ]
  * New upstream bugfix release (LP: #1045608)
  * Drop 07_test_method_calls_on_proxy_bump_max_time.patch:
    - Applied upstream
.
glib2.0 (2.33.8-1) experimental; urgency=low
.
  * New upstream release 2.33.8.
    - GIO now has a g_file_delete_async function
    - The defaults for GThreadPools max_unused_threads and max_idle_time
      values have been changed to 2 and 15*1000, respectively.
  * debian/control{,.in}: XC-Package-Type → Package-Type, thanks to Lintian.
  * debian/libglib2.0-0.symbols: Update for new symbols in this release and
    remove Debian revisions which aren't necessary.
.
glib2.0 (2.33.6-1) experimental; urgency=low
.
  * New upstream release.
  * Drop 91_revert_schema_path_warning.patch now, we are not in final freeze
    in Ubuntu, and this is not aimed at Debian Wheezy.
  * Add 91_revert_pcre_8.31_test.patch: Revert new regex test from 2.33.4
    which depends on pcre 8.31. We still have 8.30, and we are building
    against the system library instead of the bundled one.
.
glib2.0 (2.33.4-1) experimental; urgency=low
.
  [ Martin Pitt ]
  * debian/rules: Make tests always fatal on Ubuntu.
.
  [ Iain Lane ]
  * New upstream release 2.33.4.
  * Refresh patches to apply cleanly and remove those applied upstream.
  * Bump version on libpcre-dev BD in line with upstream.
  * debian/libglib2.0-0.symbols: Add new symbols in this release.
.
glib2.0 (2.33.3-2) experimental; urgency=low
.
  * Rename 07_socket_test_timespan_jitter.patch to 00git_* and update
    changelog with what got committed upstream.
  * Add 07_contenttype_test_fix_overflow.patch: Call g_content_type_guess()
    with valid data len. Fixes a segfault when running the test.
    Forwarded to GNOME #674452.
  * Add 08_contenttype_known_test_failure.patch: Disable known test failure
    due to a bug in g_content_type_from_mime_type(). For details, see
    https://bugzilla.gnome.org/show_bug.cgi?id=678941
  * Add 09_valuetransform_ulong_bool.patch: valuetransform: Fix definition of
    ulong_bool. Thanks Philipp Kern! (Closes: #662057)
  * Add 10_increase_gapplication_test_delay.patch: /gapplication/basic
    sometimes fails due to a different order of expected and actual actions;
    increase delay between them to reduce the race condition. Workaround for
    https://bugzilla.gnome.org/show_bug.cgi?id=664627
  * Add 11_timeout_test_reduce_race.patch: Due to load, particular traits of
    the architecture, or other circumstances, the /mainloop/timeouts sometimes
    manages to call the "every 100 ms" timer loop only 9 times in 1050 ms.
    This is an inherent race-condition in the test; allow it some slack and
    accept 9 times as well. Forwarded to GNOME #678959.
.
glib2.0 (2.33.3-1) experimental; urgency=low
.
  * New upstream release.
  * debian/libglib2.0-0.symbols: Add new symbols from this release.
  * debian/libglib2.0-bin.install: bash completion is now installed into
    /usr/share/bash-completion/completions/ by upstream.
  * Add debian/libglib2.0-bin.maintscript: Clean up old bash completion
    conffiles on upgrade. Add ${misc:Pre-Depends} to libglib2.0-bin.
  * Add debian/tests/control: DEP-8 autopkgtest control file. Add XS-Testsuite
    header to debian/control.in.
  * Add debian/tests/build: autopkgtest check: Build and run a program against
    glib, to verify that the headers and pkg-config file are installed
    correctly.
  * Add 06_thread_test_ignore_prctl_fail.patch: Do not fail the
    /thread/thread4 test if prctrl() fails. This happens on the Debian
    buildds.
  * debian/rules: Set G_HOME to not clutter $HOME with ~/.dbus-keyrings and
    avoid failure on the buildds where creating /home/buildd/.dbus-keyrings
    fails.
  * debian/rules: Fail the build on failed tests, except on architectures with
    known current failures (arm*, kfreebsd*, s390x, sparc).
  * Add 07_socket_test_timespan_jitter.patch:  On some buildds the poll
    duration in the /socket/timed_wait test is slightly lower than the
    requested 100000. Adjust test to not fail in these cases. Forwarded to
    GNOME #678881.
.
glib2.0 (2.33.2-1) experimental; urgency=low
.
  * Track unstable versions in the experimental branch.
  * New upstream release 2.33.2
    - GLIB_VERSION_MIN_REQUIRED now defaults to the current stable version
    - GIO input and output stream classes have grown GBytes-based methods
    - GApplication now has hooks to register D-Bus objects before the bus name
      is taken
  * Refresh 04_homedir_env.patch to cleanly apply
  * Add the new symbols from this release (g_app_info_get_supported_types,
    g_*_bytes, g_type_ensure)
.
glib2.0 (2.33.1-1) experimental; urgency=low
.
  * debian/control.in: Update Vcs-* for experimental branch.
  * Drop 03_revert_git_single_include_error.patch. For GNOME 3.5.x we want to
    properly fix the reverse dependencies. NB this is NOT for Debian wheezy.
  * New upstream release.
  * 04_homedir_env.patch: Adjust for new release.
  * Drop 95_configure-Fix-typo-in-ELF-check.patch and
    96_configure-Reset-LIBS-after-ELF-check.patch: upstream now.
  * debian/libglib2.0-0.symbols: Add new symbols from this release.
.
glib2.0 (2.33.12+really2.32.4-5) unstable; urgency=low
.
  * Fix the closing fi in the if statement in postrm.
.
glib2.0 (2.33.12+really2.32.4-4) unstable; urgency=low
.
  * Take into account multiarch when removing the cache files in postrm:
    Remove /usr/lib/gio/modules/giomodule.cache only for the native
    architecture for which this cache file was created.
    After removing /usr/share/glib-2.0/schemas/gschemas.compiled on purge,
    run dpkg-trigger explicitly, so in case libglib2.0-0 is installed for
    other architectures, the cache file is re-created. (Closes: #696389)
  * Drop the various Breaks from libglib2.0-0. Those are causing APT to fail
    on a dist-upgrade from squeeze to wheezy. (Closes: #676485)
.
glib2.0 (2.33.12+really2.32.4-3) unstable; urgency=low
.
  * Team upload
  * 92_kfreebsd_credentials.patch: use the FreeBSD credentials-passing
    implementation on kFreeBSD too, making gnome-terminal and lightdm
    work on kFreeBSD (Closes: #631968)
.
glib2.0 (2.33.12+really2.32.4-2) unstable; urgency=medium
.
  * Revert link adding for gdbus-object-manager-example. While it is
    useful to have in /usr/share/doc as an example, it must not be
    shipped with the system documentation.
  * 20_glib-compile-resources_leak.patch: new patch. Fix a leak
    introduced in version 2.32.4. Thanks Niels Thykier!
  * SECURITY: add 11_CVE-2012-3524_setuid.patch from upstream. Prevents
    using DBus in a setuid binary. Fixes CVE-2012-3524.
.
glib2.0 (2.33.12+really2.32.4-1) unstable; urgency=low
.
  * New upstream bugfix release.
  * 10_gdbus_race.patch: stolen from upstream git. Fix a race condition
    that would make gnome-shell crash on startup under some conditions.
  * libglib2.0-bin.install: bash completions have moved to /usr/share.
  * libglib2.0-bin.maintscript: remove old conffiles.
  * Add appropriate pre-dependency.
  * libglib2.0-doc.links: add link for gdbus-object-manager-example.
.
glib2.0 (2.33.12+really2.32.3-2) unstable; urgency=low
.
  * Explicitly set the shlibs version to 2.32.3 to not generate overly strict
    dependencies for udeb packages.
.
glib2.0 (2.33.12+really2.32.3-1) unstable; urgency=low
.
  * Brown paper bag upload
  * Re-upload version previously in unstable to superseded
    experimental-targetted version previously mistakenly uploaded there.
.
glib2.0 (2.32.3-1) unstable; urgency=low
.
  * New upstream release.
  * Remove debian/patches/95_configure-Fix-typo-in-ELF-check.patch and
    debian/patches/96_configure-Reset-LIBS-after-ELF-check.patch, merged
    upstream.
.
glib2.0 (2.32.2-1) unstable; urgency=low
.
  * New upstream release.
  * Refresh patches.
  * Remove debian/patches/git_powerpc_gresources.patch, merged upstream.
  * debian/patches/95_configure-Fix-typo-in-ELF-check.patch: Fix typo in ELF
    configure check. Patch cherry-picked from upstream Git.
  * debian/patches/96_configure-Reset-LIBS-after-ELF-check.patch: Reset LIBS
    after running the ELF checks otherwise we end up linking everything
    against libelf. Patch cherry-picked from upstream Git.
.
glib2.0 (2.32.1-1) unstable; urgency=low
.
  * New upstream release.
  * Refresh patches.
  * debian/patches/git_powerpc_gresources.patch: Upstream fix for gresource on
    big endian architectures, i.e powerpc. Closes: #669130
  * debian/patches/revert_schema_path_warning.patch: Revert upstream commit
    which generates a warning for applications using a non-recommended
    gsettings path. Final freeze is not the time to start fixing the gsettings
    paths of all packages. This avoids tons of spewage from the gsettings
    trigger during package installation.
.
glib2.0 (2.32.0-4) unstable; urgency=low
.
  * Set --sourcedir for the different flavors when running dh_install. This
    way the .install files can be simplified a lot which makes them much more
    readable.
  * Bump Standards-Version to 3.9.3.
  * Add Breaks against emacs23, eog and gwaei. Those applications were broken
    due to changes in GApplication and the way they interacted with
    GdkThreads so they needed to be fixed to correctly work with glib 2.32.
    Closes: #668019
.
glib2.0 (2.32.0-3) unstable; urgency=low
.
  [ Martin Pitt ]
  * 01_gettext-desktopfiles.patch: Use official "Keywords" key now,
    X-GNOME-Keywords has been deprecated for a while now. (LP: #949864)
  * debian/libglib2.0-0.postrm.in: Only remove the compiled schemas on purge,
    not during upgrades. Otherwise we have no schemas available until the new
    postinst is run, which leads to applications aborting on missing schemas.
.
  [ Michael Biebl ]
  * Don't enforce single include for glib/gversionmacros.h since this header
    is included from glib/gtypes.h which is widely used.
.
glib2.0 (2.32.0-2) unstable; urgency=low
.
  * Upload to unstable.
  * Revert upstream commit for now which makes single includes mandatory as
    the list of affected packages is still a bit too long.
.
glib2.0 (2.32.0-1) experimental; urgency=low
.
  * New upstream release.
  * Add single-include guard for gbytes.h. Patch cherry-picked from
    upstream Git.
.
glib2.0 (2.31.22-1) experimental; urgency=low
.
  * New upstream development release.
  * debian/libglib2.0-0.symbols: Add new symbol.
.
glib2.0 (2.31.20-1) experimental; urgency=low
.
  * New upstream development release.
  * debian/patches/61_glib-compile-binaries-path.patch: Refreshed.
  * debian/libglib2.0-0.symbols: Add new symbols.
  * Override list-missing target with an implementation that better handles
    multiple flavors (copied from the gtk+3.0 package).
.
glib2.0 (2.31.18-3) experimental; urgency=low
.
  * debian/control.in: Add Build-Depends on python-dbus, python-gobject-2, and
    libxml2-utils (xmllint). Required to run the test-suite.
.
glib2.0 (2.31.18-2) experimental; urgency=low
.
  * debian/control.in:
  - add libpcre3-dev to the list of dependencies of libglib2.0-dev
  - add libelf-dev as a build dependency to make gresource able to deal
    with ELF files
.
glib2.0 (2.31.18-1) experimental; urgency=low
.
  [ Gustavo Noronha Silva ]
  * New development release
  - Yeah, 2.31.8 was a mistake =/
  * debian/libglib2.0-0.symbols:
  - fix version declared for 2.31.8 symbols to not have -1
  - updated for 2.31.8 symbols
  * debian/patches/61_glib-compile-schemas-path.patch,
    debian/patches/61_glib-compile-binaries-path.patch:
  - renamed, and updated to also cover glib-compile-resources
  * debian/libglib2.0-0.install.in:
  - add glib-compile-resources
.
  [ Michael Biebl ]
  * debian/libglib2.0-bin.install: Install new gresource binary and the man
    pages for gresource and glib-compile-resources.
  * debian/libglib2.0-bin.links.in: Add symlink in /usr/bin for
    glib-compile-resources since we install the binary in a multiarch path.
  * debian/rules: Re-enable test-suite on kfreebsd but keep it non-fatal for
    now.
.
glib2.0 (2.31.8-1) experimental; urgency=low
.
  * New development release
  * debian/patches/*:
  - refreshed;
  * debian/patches/95-gmain-get-rid-of-poll_waiting.patch,
    debian/patches/96-fix-one-bit-mutex-test-on-some-platforms.patch,
    debian/patches/97-silence-compiler-warnings.patch,
    debian/patches/98-disable-two-more-GDBus-tests-using-fork.patch:
  - removed; applied upstream
  * debian/libglib2.0-0.symbols:
  - updated with new symbols
   NOTES:
    + g_simple_action_get_parameter_type (from 2.28.0)
      was made static in 09429e2c820118918e6132d32884eb02203136d4
    + g_unix_resolver_get_type (from 2.22.0) was removed
      by 5a30712dc7e4adc36b0e8fd82cf5ccec19bbbdc5, with the
      removal of !g_thread_supported code paths
.
glib2.0 (2.30.2-7) UNRELEASED; urgency=low
.
  * libglib2.0-0.postinst.in:
    + Encapsulate gio-querymodules calls in || true statements.
      Closes: #659588.
    + Only run gio-querymodules on the non-multiarch path for the host
      architecture.
  * rules: add substitution for #ARCH# for the above change.
.
glib2.0 (2.30.2-6) unstable; urgency=low
.
  * Revert the patches added in 2.30.2-5 which changed the handling of return
    types from libffi. They didn't actually fix the build failures on s390x
    and had some unpleasant side effects, like making other packages FTBFS.
.
glib2.0 (2.30.2-5) unstable; urgency=low
.
  [ Josselin Mouette ]
  * Drop deprecated build-dependencies on pygobject & python-dbus.
  * Retain one on python for the script that uses it.
.
  [ Loïc Minier ]
  * Avoid harmless warnings when processing triggers of libglib2.0-0
    ("Unable to open directory /usr/lib/gio/modules: Error opening
    directory '/usr/lib/gio/modules': No such file or directory").
.
  [ Michael Biebl ]
  * Cherry-pick patches from upstream Git which fix handling of ENUMs and
    integral return types on 64-bit BE platforms. Closes: #653308
    - Add d/p/94-closure-fix-handling-of-ENUMs-and-integral-return-ty.patch.
    - Add d/p/93-gvalue-Add-explicitly-signed-g_value_get_schar-and-g.patch.
    - Update symbols file accordingly.
.
glib2.0 (2.30.2-4) unstable; urgency=low
.
  * Upload to unstable.
  * Disable test suite on kfreebsd-* for now.
.
glib2.0 (2.30.2-3) experimental; urgency=low
.
  * debian/patches/98-disable-two-more-GDBus-tests-using-fork.patch:
    - Added. Disable gdbus test which use GMainContext over a fork, see
      https://bugzilla.gnome.org/show_bug.cgi?id=658999 for more details
.
glib2.0 (2.30.2-2) experimental; urgency=low
.
  * debian/patches/95-gmain-get-rid-of-poll_waiting.patch:
    - Added, Fix race conditions with g_main_quit being called from other
      threads by getting rid of the poll_waiting flag. (Backported from git
      master)
  * debian/patches/96-fix-one-bit-mutex-test-on-some-platforms.patch:
    - Added, Fix the 1 bit mutex failing on platforms that have pointers
      aligned to 32 bits instead of 64 bits (bgo#201322).
  * debian/patches/97-silence-compiler-warnings.patch:
    - Added, Fix various compiler warnings
.
glib2.0 (2.30.2-1) experimental; urgency=low
.
  * New upstream release.
  * debian/patches/70-fix-race-in-gdbus-connection-test.patch:
    - Removed, merged upstream.
  * debian/patches/80_gtk_doc_out_of_tree.patch:
    - Removed, merged upstream.
.
glib2.0 (2.30.1-2) experimental; urgency=low
.
  [ Martin Pitt ]
  * debian/patches/01_gettext-desktopfiles.patch:
    - Translate X-GNOME-FullName and X-GNOME-Keywords, too.
.
  [ Sjoerd Simons ]
  * debian/patches/80_gtk_doc_out_of_tree.patch:
    - Added. Fix documentation generation when build out of tree
.
  [ Michael Biebl ]
  * Transition to multiarch, thanks Steve. Closes: #634099
    The following modifications were made to the original patch:
    - Drop the libtool .la files, since we break existing references anyway.
    - Don't mark libglib2.0-0-dbg as Multi-Arch: same and install into
      /usr/lib/debug, not /usr/lib/<triplet>/debug.
    - Guard the for loops in debian/rules with "set -e".
  * debian/libglib2.0-dev.install.in:
    - Install gdb auto-load files.
.
glib2.0 (2.30.1-1) experimental; urgency=low
.
  [ Michael Biebl ]
  * New upstream release.
    - Avoid assertion in GDBus if we fail to authenticate twice.
      Closes: #634312
  * Bump debhelper compatibility level to 8.
    - Bump Build-Depends on debhelper.
    - Don't pass --dbg-package= without an argument to dh_strip as commands
      will fail rather than warn when they are passed unknown options.
  * Don't use brace expansion in debian/libglib2.0-0.install and
    debian/libglib2.0-dev.install.
  * debian/control.in
    - Use architecture wildcard for kfreebsd and hurd.
    - Bump Standards-Version to 3.9.2. No further changes.
    - Set pkg-gnome-maintainers@lists.alioth.debian.org as Maintainer.
    - Add Build-Depends on libffi-dev (>= 3.0.0).
  * debian/libglib2.0-dev.install
    - Install gdbus-codegen binary and manpage.
    - Install gtester and gtester-report manpage.
  * debian/libglib2.0-bin.install
    - Install bash completion files for gdbus and gsettings.
  * debian/libglib2.0-0.symbols
    - Update symbols file. The GAction API had an incompatible change. As a
      result g_action_set_state has been renamed to g_action_change_state.
      See upstream commit 5ff65d869543587d10d78c123698e47effc5fb8c for further
      details and on the impact of this change.
  * debian/watch:
    - Track .xz tarballs.
  * Update patches
    - Remove 03_blacklist-directories.patch, merged upstream.
    - Remove 10_gdesktopappinfo_set_last_used.patch, fixed upstream.
    - Remove 60_wait-longer-for-threads-to-die.patch, fixed upstream using a
      counter.
    - Refresh remaining patches.
.
  [ Josselin Mouette ]
  * Break gtk3 < 3.0.12 because it uses an internal symbol that ceases
    to work with glib 2.30.
.
  [ Sjoerd Simons ]
  * debian/rules: Explicitely build gtk-doc
  * debian/patches/70-fix-race-in-gdbus-connection-test.patch:
    - Added, fix race condition in the GDBusConnection life-cycle test
.
glib2.0 (2.28.8-1) unstable; urgency=low
.
  * New upstream release.
  * debian/watch:
    - Update to version 3.
    - Track .xz tarballs.
  * Bump debhelper compatibility level to 8.
    - Bump Build-Depends on debhelper.
    - Don't pass --dbg-package= without an argument to dh_strip as commands
      will fail rather than warn when they are passed unknown options.
  * Don't use brace expansion in debian/libglib2.0-0.install and
    debian/libglib2.0-dev.install.
  * debian/control.in
    - Use architecture wildcard for kfreebsd and hurd.
    - Bump Standards-Version to 3.9.2. No further changes.
    - Set pkg-gnome-maintainers@lists.alioth.debian.org as Maintainer.
  * Refresh patches.
.
glib2.0 (2.28.6-4) unstable; urgency=low
.
  * Upload to unstable.
.
glib2.0 (2.28.6-3) experimental; urgency=low
.
  * Break gnome-session < 3.0.0-3 for the updated defaults.list taking
    x-scheme-* into account.
  * Break gdm < 3.0.3 to avoid adding a security hole to it.
  * 10_gdesktopappinfo_set_last_used.patch: new patch. When calling
    g_app_info_set_as_last_used_for_type, correctly inherit the default
    filled in the file from the system default. This avoids
    gnome-control-center breaking file associations just by opening the
    info dialog.
.
glib2.0 (2.28.6-2) experimental; urgency=low
.
  * Team upload.
  * Drop 20_mime_extension_point.patch and add Breaks against gvfs
    and gnome-control-center to ensure they have been updated at the
    same time.
  * Drop Conflicts against pango, it's no longer relevant (even for
    oldstable).
  * Fix watch file.
  * Drop leading article in descriptions as recommended by lintian.
  * Add lintian overrides for package-name-doesnt-match-sonames, it's a
    deliberate choice.
  * Add some copyright holders to debian/copyright to appease lintian.
  * Drop unneeded section/priority fields as they duplicate the default
    values.
  * Add some DEP-3 descriptions to patches that had no description at
    all.
.
glib2.0 (2.28.6-1) unstable; urgency=low
.
  * New upstream bugfix release.
.
glib2.0 (2.28.4-1) unstable; urgency=low
.
  * debian/control.in:
    + Build depend on dbus, dbus-x11,  shared-mime-info, python-gobject
      and python-dbus, needed by the test suite.
    + libglib2.0-data doesn't need to depend on libglib2.0-0, since
      it only ships translations. This will avoid making glib
      uninstallable on the buildds when it is uploaded until the new
      version has been built.
  * d/p/0001-Run-gio-tests-with-a-dbus-session.patch:
    + New patch. Run gio tests through dbus-launch, since some of them
      need a running dbus session.
  * debian/control.in,
    debian/rules:
    + Add autoreconf magic, needed by the above patch.
  * New upstream release.
.
glib2.0 (2.28.2-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.28.1-1) unstable; urgency=low
.
  * New upstream release.
    + Fixes g_timeout_add overflowing with large timeouts. Closes: #606618.
.
glib2.0 (2.28.0-2) unstable; urgency=low
.
  * 20_mime_extension_point.patch: temporary revert the upstream change
    in URI schemes handling. Closes: #612876.
    Note for later: it must absolutely be reverted in a synchronized
    upload with gvfs 1.8 and control-center 3.0.
.
glib2.0 (2.28.0-1) unstable; urgency=low
.
  * debian/control.in:
    + Drop obsolete conflicts/replaces with libglib1.3.
    + Don't suggest libgtk2.0-doc in the doc package.
  * New upstream stable release.
    + debian/control.in:
      - Bump the libpcre3-dev build dependency.
    + debian/patches/01_gettext-desktopfiles.patch,
      debian/patches/02_gettext-desktopfiles-ubuntu.patch,
      debian/patches/04_homedir_env.patch,
      debian/patches/61_glib-compile-schemas-path.patch:
      - Refreshed.
    + debian/libglib2.0-0.symbols:
      - Updated.
.
glib2.0 (2.27.91-1) experimental; urgency=low
.
  * debian/rules:
    - Don't exclude .sgml and .devhelp files from being compressed.
      The former are already excluded by dh_compress and the later
      can be compressed now that devhelp can handle them.
    - Fix variable substitution.
  * New upstream release.
    - debian/patches/62_dont_crash_without_desktop_filename.patch:
      + Removed, included upstream.
  * debian/control.in:
    - Standards-Version is 3.9.1, no changes needed.
.
glib2.0 (2.27.90-2) experimental; urgency=low
.
  * debian/patches/62_dont_crash_without_desktop_filename.patch
    * Added. Fix crash when launching application without a desktop file (From
      upstream git)
.
glib2.0 (2.27.90-1) experimental; urgency=low
.
  * Switch to CDBS' flavors system.
  * Switch to source format 3.0 (quilt).
  * Stop symlinking /usr/share/doc/$pkg directories.
  * debian/rules:
    - Explicitly link with --no-as-needed, as --as-needed might be the
      default and is harmful for us.
    - Run the test suite but don't make it fatal yet.
  * New upstream release.
    - debian/libglib2.0-0.symbols:
      + Updated.
.
glib2.0 (2.27.5-1) experimental; urgency=low
.
  * New upstream release.
    + debian/libglib2.0-0.symbols:
      - Updated.
  * debian/rules:
    + Make the shlibs always depend on the latest upstream version.
      We have symbols file anyway, and manually bumping the shver is
      error prone.
.
glib2.0 (2.27.4-2) experimental; urgency=low
.
  * debian/rules: Change --disable-visibility to --disable-Bsymbolic for
    the refdbg package.
.
glib2.0 (2.27.4-1) experimental; urgency=low
.
  * New upstream release.
    + debian/libglib2.0-0.symbols:
      - Updated.
    + debian/rules:
      - Bump the SHVER.
.
glib2.0 (2.27.3-1) experimental; urgency=low
.
  * New upstream release.
    + debian/libglib2.0-0.symbols:
      - Updated.
.
glib2.0 (2.27.2-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/patches/*:
      - Refreshed.
    + debian/libglib2.0-0.symbols:
      - Updated
    + debian/patches/70_dtrace.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.27.1-1) experimental; urgency=low
.
  [ Josselin Mouette ]
  * Drop lynx dependency in the -doc package. Suggest devhelp instead.
    Closes: #599743.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/patches/70_fix-header-cleaup-fallout.patch:
      - Dropped, merged upstream.
    + debian/patches/*:
      - Refreshed.
    + debian/libglib2.0-0.symbols:
      - Updated
    + debian/patches/70_dtrace.patch:
      - Patch from upstream GIT to not enable DTrace if it's not
        available. Fixes the build on kFreeBSD (Closes: #592024).
.
glib2.0 (2.27.0-1) experimental; urgency=low
.
  [ Sjoerd Simons ]
  * New upstream experimental release
  * debian/libglib2.0-0.symbols
    + Updated
  * debian/patches/70_fix-header-cleaup-fallout.patch
    + Added. Fix complilation error (from upstream git)
.
  [ Sebastian Dröge ]
  * Upload to experimental.
  * debian/rules:
    + Update SHVER to 2.27.0.
.
glib2.0 (2.26.0-1) experimental; urgency=low
.
  * New upstream stable release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for the new version.
    + debian/patches/90_gregex-system-pcre.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.25.16-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for the new version.
    + debian/patches/90_gregex-system-pcre.patch:
      - Fix GRegex compilation with the system pcre.
.
glib2.0 (2.25.15-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for the new version.
.
glib2.0 (2.25.14-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for the new version.
.
glib2.0 (2.25.13-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/patches/90_git_glibconfig_build.patch,
    + debian/patches/99_autoreconf.patch:
      - Dropped, merged upstream.
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for the new version.
    + debian/control.in:
      - (Build-) depend on pkg-config >= 0.16.0.
.
glib2.0 (2.25.12-2) experimental; urgency=low
.
  [ Sebastien Bacher ]
  * debian/rules:
    + clean the distributed glibconfig.h it has 64 bits values
      which leaded to the issues on 32 bits architectures
      (Closes: #591075, #591492).
  * debian/patches/90_git_glibconfig_build.patch:
    + git change to use the builddir glibconfig.h and not the srcdir one
.
  [ Sebastian Dröge ]
  * debian/patches/99_autoreconf.patch:
    + Regenerated autotools files for the above patch.
  * debian/rules:
    + Call dh_installdirs to actually use the .dirs files.
.
glib2.0 (2.25.12-1) experimental; urgency=low
.
  [ Josselin Mouette ]
  * Don’t run the triggers when executed from a nonexistent directory.
    Closes: #589693.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API changes.
    + debian/patches/99_gsocket-create-socket-cloexec.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.25.11-3) experimental; urgency=low
.
  * debian/patches/99_gsocket-create-socket-cloexec.patch:
    Patch by Julien Cristau:
    Just because SOCK_CLOEXEC was defined at build time doesn't mean the
    kernel we're running on supports it.  So if socket() fails with EINVAL,
    try again without the flag.
.
glib2.0 (2.25.11-2) experimental; urgency=low
.
  * debian/control.in,
    debian/libglib2.0-bin.links,
    debian/libglib2.0-0.links:
    + Move links to the -bin package again but let the -dev package
      depend on the -bin package. Having the links in the shared library
      package will cause conflicts when the soname changes but the
      links in /usr/bin must be there at least if the -dev package is
      installed because build systems might assume that the applications
      are in $PATH.
  * debian/patches/61_glib-compile-schemas-path.patch:
    + Adjust path to glib-compile-schemas in the pkg-config file.
.
glib2.0 (2.25.11-1) experimental; urgency=low
.
  [ Josselin Mouette ]
  * Drop type-handling usage. Closes: #587863.
  * Bump standards version accordingly.
  * Patch from Ubuntu, thanks Sébastien Bacher. Closes: #587661.
    * debian/libglib2.0-bin.install:
      - Install glib-compile-schemas
    * debian/libglib2.0-bin.postinst:
      - Run glib-compile-schemas when schemas modified
    * debian/libglib2.0-bin.triggers:
      - Watch for schema changes
    * debian/libglib2.0-dev.install:
      - glib-compile-schemas moved to libglib2.0-bin
    * debian/libglib2.0-dev.install:
    - install the new gdb python macros since the gdb version is recent
      enough now to use those
  * Put gio-querymodules and glib-compile-schemas in a private,
    versioned directory in libglib2.0-0 to avoid a dependency loop.
  * Move back the triggers to libglib2.0-0.
  * Add a purge of the necessary files in the postinst.
  * Stop recommending libglib2.0-bin since the necessary stuff is in
    libglib2.0-0 now.
  * Add symlinks to keep the binaries at their place in libglib2.0-bin.
  * Tighten the dependency between libglib2.0-bin and libglib2.0-0.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API changes.
  * debian/libglib2.0-0.dirs:
    + Create empty directories for the triggers to actually work.
  * debian/libglib2.0-0.links,
    debian/control.in:
    + Add links for gio-querymodules and glib-compile-schemas in
      /usr/bin.
.
glib2.0 (2.25.10-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API changes.
    + debian/libglib2.0-dev.install:
      - Drop gsettings-schema-convert.
    + debian/patches/*:
      - Refreshed all patches.
.
glib2.0 (2.25.9-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API additions.
.
glib2.0 (2.25.8-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API additions.
.
glib2.0 (2.25.7-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API additions.
.
glib2.0 (2.25.6-1) experimental; urgency=low
.
  * New upstream development release.
.
glib2.0 (2.25.5-1) experimental; urgency=low
.
  * New upstream development release.
.
glib2.0 (2.25.4-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API additions.
    + debian/libglib2.0-bin.install:
      - Add gdbus utility and manpage.
.
glib2.0 (2.25.3-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API additions.
    + debian/libglib2.0-dev.install:
      - gschema-compile was renamed to glib-compile-schemas.
    + debian/control.in,
      debian/rules:
      - Manpages are now properly shipped with the tarballs,
        drop xsltproc, etc. build dependencies.
.
glib2.0 (2.25.2-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/libglib2.0-0.install,
      debian/libglib2.0-0.triggers,
      debian/control.in,
      debian/rules,
      debian/libglib2.0-bin.install,
      debian/libglib2.0-bin.triggers:
      - Move binaries to an unversioned, separate package.
      - Add new gsettings tool.
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API additions.
.
glib2.0 (2.25.1-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for API additions.
    + debian/libglib2.0-dev.install,
      debian/libglib2.0-0.install:
      - Install new GSettings utitilies and manpages.
  * debian/control.in,
    debian/rules:
    + Enable manpage generation via xsltproc for now until
      https://bugzilla.gnome.org/show_bug.cgi?id=616264
      is fixed.
.
glib2.0 (2.24.0-1) unstable; urgency=low
.
  * New upstream stable release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated 2.23 symbols to 2.24 to force dependencies on a stable release.
    + debian/rules:
      - Remove check-dist.mk include to allow uploads to unstable again.
.
glib2.0 (2.23.6-1) experimental; urgency=low
.
  [ Emilio Pozuelo Monfort ]
  * debian/patches/05_gvariant_test_failure.patch:
    - Backport patch from upstream git to fix a gvariant test that fails
      randomly on x86.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new API.
    + debian/patches/05_gvariant_test_failure.patch:
      - Dropped, merged upstream.
  * debian/rules:
    + Make unit test failures non-fatal again because of race conditions
      in some tests.
.
glib2.0 (2.23.5-1) experimental; urgency=low
.
  [ Emilio Pozuelo Monfort ]
  * debian/patches/05-dont-fail-a-couple-of-tests-when-running-as-root.patch:
    - Updated.
  * 06-test-for-unexisting-files-in-TMP-and-not-in-HOME.patch:
    - Added, don't look for an unexisting file in $HOME since it will
      fail with an unexpected result if it's not writable (which happens
      on some buildds). Look at $TMP instead.
  * debian/rules:
    - Make test suite failures fatal on amd64, i386 and s390.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new API.
    + debian/patches/05-dont-fail-a-couple-of-tests-when-running-as-root.patch,
      debian/patches/06-test-for-unexisting-files-in-TMP-and-not-in-HOME.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.23.4-1) experimental; urgency=low
.
  [ Emilio Pozuelo Monfort ]
  * debian/patches/05-dont-fail-a-couple-of-tests-when-running-as-root.patch:
    - Added, expect a couple of tests that play with file permissions
      to succeed when running as root.
  * debian/control.in:
    - Add desktop-file-utils to build depends to fix another test.
    - Standards-Version is 3.8.4, no changes needed.
    - Let libgio-fam depend on ${misc:Depends}.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new API.
.
glib2.0 (2.23.3-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new API.
.
glib2.0 (2.23.2-2) experimental; urgency=low
.
  * debian/control.in,
    debian/libglib2.0-0.triggers,
    debian/libglib2.0-0.install,
    debian/libglib2.0-dev.install:
    + Ship gio-querymodules in the shared library package
      and triggers calls to every time /usr/lib/gio/modules
      is touched by a package.
.
glib2.0 (2.23.2-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new API.
.
glib2.0 (2.23.1-1) experimental; urgency=low
.
  [ Sebastian Dröge ]
  * debian/control.in:
    + Let the -dev package depend on zlib1g-dev as it's required by
      the pkg-config file now.
.
  [ Emilio Pozuelo Monfort ]
  * New upstream release.
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new API.
.
glib2.0 (2.23.0-1) experimental; urgency=low
.
  [ Loïc Minier ]
  * -refdbg package is section/prio debug/extra.
  * Add note to NOT use -Wl,--as-needed as it might drop a critical -lpthread
    link in gio (which dlopen()s gvfs); see
    mid:<1257999019.21780.15.camel@marzipan>.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/patches/90_mimetype-sorting.patch:
      - Dropped, merged upstream.
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Update for new API.
    + debian/control.in:
      - Build depend on zlib.
    + debian/rules:
      - Include check-dist.mk to prevent accidental uploads to unstable.
.
glib2.0 (2.22.2-2) unstable; urgency=low
.
  * debian/patches/90_mimetype-sorting.patch:
    + Fix sorting of mimetypes by weight. Highest weight means most
      important, not the other way around. Patch from upstream GIT.
.
glib2.0 (2.22.2-1) unstable; urgency=low
.
  [ Emilio Pozuelo Monfort ]
  * Move libglib2.0-data to section libs. Closes: #549079.
.
  [ Sebastian Dröge ]
  * New upstream bugfix release.
.
glib2.0 (2.22.1-1) unstable; urgency=low
.
  * New upstream bugfix release:
    + debian/patches/10_inotify_init1.patch,
      debian/patches/30_metadata_symlinks.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.22.0-2) unstable; urgency=low
.
  * Don’t install Python GDB macros for now, they only work with an
    experimental GDB branch.
  * 30_metadata_symlinks.patch: stolen upstream. Get metadata to work
    with symbolic links. Closes: #548142.
.
glib2.0 (2.22.0-1) unstable; urgency=low
.
  [ Josselin Mouette ]
  * Move libglib-2.0.so.0 to /lib so that DeviceKit (and other potential
    sources) can work without having /usr mounted.
  * 11_chmod_symlinks.patch: new patch. Fix potential security issue
    when manipulating symlink permissions. Thanks Arand Nash for the
    heads up.
.
  [ Sebastian Dröge ]
  * New upstream stable release:
    + debian/patches/11_chmod_symlinks.patch:
      - Dropped, merged upstream.
    + debian/libglib2.0-0.symbols,
      debian/rules:
      - Update for the new version.
.
glib2.0 (2.21.6-1) experimental; urgency=low
.
  [ Josselin Mouette ]
  * 10_inotify_init1.patch: fall back on inotify_init when inotify_init1
    does not work, as happens with kernel versions < 2.6.27.
    Closes: #544354.
.
  [ Sebastian Dröge ]
  * New upstream development release:
    + debian/libglib2.0-0.symbols:
      - Update for the new version.
    + debian/rules:
      - Update SHVER to 2.21.6.
  * debian/control.in:
    + Updated Standards-Version to 3.8.3, no additional changes needed.
.
glib2.0 (2.21.5-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/libglib2.0-0.symbols:
      - Update for the new version.
    + debian/rules:
      - Update SHVER to 2.21.5.
  * debian/control.in:
    + Updated Standards-Version to 3.8.2, no additional changes needed.
.
glib2.0 (2.21.4-1) experimental; urgency=low
.
  * New upstream development release:
    + debian/rules:
      - Include check-dist.mk to prevent accidental uploads to unstable.
      - Update shlib version to 2.21.4.
    + debian/libglib2.0-0.symbols:
      - Update for the API additions.
  * debian/control.in:
    + Updated Standards-Version to 3.8.1, no additional changes needed.
.
glib2.0 (2.20.4-1) unstable; urgency=low
.
  * New upstream bugfix release.
.
glib2.0 (2.20.3-1) unstable; urgency=low
.
  [ Josselin Mouette ]
  * Only build the libgio-fam package for hurd and kfreebsd, it is
    totally useless under Linux.
  * Make it recommend gamin for kqueue support.
  * Make libgamin-dev the primary build-dependency. Closes: #526219.
.
  [ Sebastian Dröge ]
  * New upstream bugfix release.
.
glib2.0 (2.20.1-2) unstable; urgency=low
.
  * Add refdbg package: libglib2.0-0-refdbg. (Closes: #525915)
.
glib2.0 (2.20.1-1) unstable; urgency=low
.
  * New upstream bugfix release:
    + 10_log_valist.patch, dropped.
.
glib2.0 (2.20.0-3) unstable; urgency=low
.
  * Fix debug package section.
  * 10_log_valist.patch: new patch, stolen upstream. Copy a va_list
    before using it twice. Closes: #520484.
.
glib2.0 (2.20.0-2) unstable; urgency=low
.
  * Remove 02_usr_share_gnome_applications.patch, now gnome-session sets
    XDG_DATA_DIRS accordingly.
.
glib2.0 (2.20.0-1) unstable; urgency=low
.
  * New upstream stable release.
  * Upload to unstable, remove check-dist include.
    This won't block any transitions because of symbol files.
  * debian/libglib2.0-0.symbols,
    debian/rules:
    + Update for the API changes.
.
glib2.0 (2.19.10-1) experimental; urgency=low
.
  * New upstream development release.
.
glib2.0 (2.19.8-2) experimental; urgency=low
.
  * debian/patches/01_gettext-desktopfiles.patch,
    debian/patches/02_gettext-desktopfiles-ubuntu.patch:
    + Updated from the Ubuntu package, thanks to Martin Pitt for the changes:
      - 01_gettext-desktopfiles.patch: Merge OpenSUSE's and our patch:
        - Now prefers inline translations over gettext translations, which
          fixes a few corner cases (like renaming .desktop files on the
          user's desktop), is more in line with the recent gconf patch,
          and more palatable for upstream inclusion.
        - Use X-GNOME-Gettext-Domain, for preparing upstream inclusion.
        - Forwarded upstream now.
      - Add 02_gettext-desktopfiles-ubuntu.patch: Provide backwards
        compatibility for 01_gettext-desktopfiles.patch for
        X-{Debian,Ubuntu}-Gettext-Domain. The latter was changed to use
        X-GNOME-, so this is necessary until all our .desktop files are
        converted.
.
glib2.0 (2.19.8-1) experimental; urgency=low
.
  * New upstream development release.
.
glib2.0 (2.19.7-1) experimental; urgency=low
.
  * New development release
.
glib2.0 (2.19.6-1) experimental; urgency=low
.
  * New development release
  * debian/libglib2.0-0.symbols:
  - updated with new symbols
.
glib2.0 (2.18.4-2) unstable; urgency=low
.
  * Release to unstable
  * debian/rules:
  - bump SHVER, since we are already forcing a 2.18.0 dependecy on the
    symbols introduced in the development versions
  * debian/control.in:
  - added Homepage and Vcs-* control fields
.
glib2.0 (2.18.4-1) experimental; urgency=low
.
  [ Josselin Mouette ]
  * 04_homedir_env.patch: new patch. Handle the G_HOME environment
    variable, to override the passwd entry. This will allow to fix
    various kinds of build failures due to restricted build
    environments.
.
  [ Sebastian Dröge ]
  * New upstream bugfix release.
.
glib2.0 (2.18.3-1) experimental; urgency=low
.
  * New upstream bugfix release.
.
glib2.0 (2.18.2-1) experimental; urgency=low
.
  [ Loic Minier ]
  * Suffix the Debian specific pcre bdep with "~" to allow backports and make
    lintian happy.
  * Update doc-base entries for new doc-base secttions: use Programming/C
    instead of Apps/Programming.
  * Use uppercase GNOME in doc-base description of glib.
  * Recommend shared-mime-info for content-type guessing API; see
    GNOME #554563.
  * Pass -k to make check.
.
  [ Sebastian Dröge ]
  * New upstream bugfix release.
.
glib2.0 (2.18.1-1) experimental; urgency=low
.
  * New upstream bugfix release.
  * debian/libglib2.0-0.symbols:
    + Updated all 2.17 symbols to 2.18.0 to get dependencies on the stable
      versions.
.
glib2.0 (2.18.0-1) experimental; urgency=low
.
  * New upstream stable release, with API addition.
    - Update symbols file for new g_object_get_type() symbol and drop
      g_slice_debug_tree_statistics() which shouldn't have been exported in
      the first place.
    - Refresh patches 01_gettext-desktopfiles,
      02_usr_share_gnome_applications, and 03_blacklist-directories to apply
      cleanly.
.
glib2.0 (2.17.7-1) experimental; urgency=low
.
  * New upstream development release, the new API might still change:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new symbols.
.
glib2.0 (2.17.6-1) experimental; urgency=low
.
  * New upstream development release, the new API might still change:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new symbols.
.
glib2.0 (2.17.4-1) experimental; urgency=low
.
  [ Loic Minier ]
  * List back m68k in arches where we could make the testsuite fatal,
    following the update on GNOME #481575.
  * Document why testsuite is currently completely disabled (fails when
    there's no writable $HOME).
.
  [ Sebastian Dröge ]
  * New upstream development release, the new API might still change:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new symbols.
    + debian/patches/90_gio-nautilus-crash.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.17.3-2) experimental; urgency=low
.
  * debian/patches/90_gio-nautilus-crash.patch:
    + Patch from upstream SVN to fix a crash in nautilus 2.22.
.
glib2.0 (2.17.3-1) experimental; urgency=low
.
  * New upstream development release, the new API might still change:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new symbols.
  * debian/control.in:
    + Updated Standards-Version to 3.8.0, no additional changes needed.
.
glib2.0 (2.17.2-1) experimental; urgency=low
.
  * New upstream development release, the new API might still change:
    + debian/rules,
      debian/libglib2.0-0.symbols:
      - Updated for the new symbols.
.
glib2.0 (2.17.0-1) experimental; urgency=low
.
  [ Josselin Mouette ]
  * debian/rules: don't compress .sgml and .devhelp files.
.
  [ Loic Minier ]
  * Fix broken second dh_strip invocation which was not only acting on the
    udeb but also on binary packages (-s -pUDEB should have been -pUDEB).
.
  [ Sebastian Dröge ]
  * New upstream development release, the new API might still change.
  * debian/rules:
    + Include check-dist.mk to prevent accidental uploads to unstable.
    + Bump SHVER to 2.17.0.
    + Pass -c4 to dh_makeshlibs.
  * debian/libglib2.0-0.symbols:
    + Update symbols.
.
glib2.0 (2.16.3-2) unstable; urgency=low
.
  * debian/rules: Don't add the debug symbols of the udeb in the -dbg package.
    Makes the debugging info actually usefull again (Closes: #468093)
.
glib2.0 (2.16.3-1) unstable; urgency=low
.
  [ Sjoerd Simons ]
  * debian/patches/70_g_timeout_seconds_fix.patch
    + Added. Fix a rare case where a timeout from g_timeout_add_seconds() is
    never triggered. See http://bugzilla.gnome.org/show_bug.cgi?id=448943
.
  [ Sebastian Dröge ]
  * New upstream bugfix release:
    + debian/patches/70_g_timeout_seconds_fix.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.16.2-1) unstable; urgency=low
.
  [ Loic Minier ]
  * Drop nautilus conflicts as it triggers a bug in the APT resolver on
    dist-upgrade.
  * Update patch 01_gettext-desktopfiles with a newer version taken from the
    Ubuntu package.
  * Update and enable patch 01_gettext-desktopfiles to also look for
    X-Debian-Gettext-Domain if X-Ubuntu-Gettext-Domain isn't present.
.
  [ Sebastian Dröge ]
  * New upstream bugfix release:
    + Fixes FTBFS on hurd/i386 (Closes: #472129).
    + debian/patches/04_nfs4.patch,
      debian/patches/80_static-mutex-aliasing-warnings.patch,
      debian/patches/81_c99-inline-warnings.patch:
      - Dropped, merged upstream.
.
glib2.0 (2.16.1-2) unstable; urgency=low
.
  [ Josselin Mouette ]
  * 02_usr_share_gnome_applications.patch: ported from GnomeVFS. Use
    /usr/share/gnome/applications/defaults.list to obtain the defaults
    for MIME mapping. Currently this file is still shipped by GnomeVFS.
    Closes: #469504.
  * 03_blacklist-directories.patch: ported from GnomeVFS. Blacklist more
    FHS directories that are commonly found as Unix mount points,
    including those necessary for live-initramfs.
  * 04_nfs4.patch: ported from GnomeVFS. Support for nfs4 filesystems.
.
  [ Sebastian Dröge ]
  * 80_static-mutex-aliasing-warnings.patch: Prevent warnings about
    breaking strict-aliasing rules when using G_LOCK().
    See http://bugzilla.gnome.org/show_bug.cgi?id=316221
  * 81_c99-inline-warnings.patch: Fix warnings when using G_INLINE_FUNC
    in C99 mode (Closes: #470796).
    See http://bugzilla.gnome.org/show_bug.cgi?id=522292
  * Don't ship the old changelogs and news to save some space.
.
glib2.0 (2.16.1-1) unstable; urgency=low
.
  * New upstream bugfix release.
.
glib2.0 (2.16.0-1) unstable; urgency=low
.
  * New upstream stable release:
    + debian/rules:
      - Update shlibs version to 2.16.0.
      - Drop check-dist include, upload to unstable.
    + debian/libglib2.0-0.symbols:
      - Updated symbols for the new version.
.
glib2.0 (2.15.6-1) experimental; urgency=low
.
  * New upstream release:
    + debian/rules:
      - Update shlibs version to 2.15.6.
    + debian/libglib2.0-0.symbols:
      - Updated symbols for the new version.
.
glib2.0 (2.15.5-1) experimental; urgency=low
.
  * New upstream release:
    + debian/patches/02_fam-helper.patch:
      - Dropped, merged upstream.
    + debian/patches/60_wait-longer-for-threads-to-die.patch:
      - Updated to apply cleanly again.
    + debian/libglib2.0-0.symbols:
      - Update symbols for 2.15.5.
.
glib2.0 (2.15.4-1) experimental; urgency=low
.
  [ Loic Minier ]
  * Add a gio gtk-doc symlink.
  * Add a doc-base file for gio.
.
  [ Sebastian Dröge ]
  * New upstream release:
    + debian/libglib2.0-0.symbols:
      - Update symbols for 2.15.4.
    + debian/rules:
      - Update API version to 2.15.4.
  * debian/patches/02_fam-helper.patch:
    + Fix build failure when building with FAM and not gamin. See BGO #509419
      and BGO #512384 for more details.
.
glib2.0 (2.15.3-1) experimental; urgency=low
.
  * New upstream release.
  * debian/rules,
    debian/libglib2.0-0.symbols:
    + Update shlibs and all unstable symbols to 2.15.3.
.
glib2.0 (2.15.2-3) experimental; urgency=low
.
  [ Loic Minier ]
  * Bump up dpkg-dev build-dep to >= 1.14.13 for Build-Depends-Package; thanks
    Raphaël Hertzog.
  * Drop duplicate dpkg-dev bdep.
  * Let libglib2.0-dev depends on ${shlibs:Depends}; thanks Niko Tyni.
.
  [ Sebastian Dröge ]
  * debian/libgio-fam.install:
    + Fix path where we install the GIO FAM plugin. It shouldn't be
      /usr/lib/gio/gio but /usr/lib/gio. Thanks to Sedat Dilek for reporting.
.
glib2.0 (2.15.2-2) experimental; urgency=low
.
  * debian/rules:
    + Disable selinux for the udeb until we have a libselinux1 udeb.
.
glib2.0 (2.15.2-1) experimental; urgency=low
.
  [ Sebastian Dröge ]
  * New upstream development release, the new API may still change
    incompatibly; API additions:
    + Drop patch 67_gcc43-inline.patch, merged upstream.
  * Include check-dist again to prevent accidental uploads to unstable.
  * Disable testsuite for now.
  * Bump shlibs to 2.15.2.
  * Add build dependencies for GIO and add libgio-fam package that contains
    a GIO file/directory monitoring module that uses fam.
  * debian/rules,
    debian/libglib2.0-0.symbols,
    debian/control.in:
    + Add a symbol file for GLib, generated from 2.12.4, 2.14.3, 2.15.2.
      This is handled by dh_makeshlibs. Require dpkg-dev (>= 1.14.8) for this.
  * debian/control.in:
    + Recommend python on the -dev package for the gtester-report utility.
  * debian/shlibs.local:
    + Dropped as pcre is fixed now since 7.4-1 (Closes: #450796).
.
  [ Loic Minier ]
  * Build-dep on gtk-doc-tools to prevent a spurious warning from
    gtk-doc.make: "/bin/sh: line 11: test: !=: unary operator expected".
  * Build udeb against system pcre again (now that it provides an udeb); bump
    up libpcre build-dep to >= 7.4-1 (Closes: #443067).
.
glib2.0 (2.14.4-2) unstable; urgency=low
.
  * debian/rules:
    + Make testsuite failures on sparc non-fatal too as the
      threadpool-test fails there too, most probably of some
      timing related bug. See BGO #481573.
.
glib2.0 (2.14.4-1) unstable; urgency=low
.
  [ Loic Minier ]
  * Fix disabled patch name 01_gettext-desktopfiles in series.
.
  [ Josselin Mouette ]
  * Conflict against nautilus < 2.20 according to
    http://bugzilla.gnome.org/show_bug.cgi?id=440988#c182
.
  [ Sebastian Dröge ]
  * New upstream bugfix release.
.
glib2.0 (2.14.3-1) unstable; urgency=high
.
  [ Sebastian Dröge ]
  * debian/shlibs.local:
    + Override libpcre3's shlibs to require at least pcre 7.2 (See: #449289).
.
  [ Loic Minier ]
  * New upstream stable release; bug fixes and security update.
    - SECURITY: Update the internal copy of PCRE to 7.4, fixes CVE-2007-4767;
      the internal copy is used for the udeb.
    - Drop relibtoolizing patch, 70_relibtoolize, as upstream prepared this
      tarball with libtool 1.5.24.
.
glib2.0 (2.14.2-1) unstable; urgency=low
.
  * Add GNOME bug id to 70_relibtoolize.
  * New upstream stable release; no API change.
  * Add lpia to the list of arches on which testsuite failures are fatal.
.
glib2.0 (2.14.1-5) unstable; urgency=low
.
  * Add a relibtoolizing patch, 70_relibtoolize, to get some hurd-i386 fixes
    in libtool; see Debian #445001.
.
glib2.0 (2.14.1-4) unstable; urgency=low
.
  * Document that testsuite failure aren't fatal on m68k due to GNOME #481575.
  * Disable testsuite on arm, mips, powerpc; see GNOME #481573; mipsel was
    already disabled because its testsuite results were unknown in
    experimental.
  * Document that testsuite failure is disabled on hppa, hurd, kfreebsd-amd64,
    kfreebsd-i386 due to Debian #428674.
.
glib2.0 (2.14.1-3) unstable; urgency=medium
.
  * Only build the standards debs against the system PCRE, i.e. build the udeb
    against the builtin PCRE until pcre3 provides an udeb.
.
glib2.0 (2.14.1-2) unstable; urgency=low
.
  * debian/control.in,
    debian/rules:
    + Build against the system PCRE instead of the supplied one.
.
glib2.0 (2.14.1-1) unstable; urgency=low
.
  [ Loic Minier ]
  * Mention I added 90_fix-abi-check-with-debug in 2.14.0-1
.
  [ Sebastian Dröge ]
  * New upstream major stable release, without API changes.
  * debian/patches/90_fix-abi-check-with-debug.patch:
    + Dropped, merged upstream.
.
glib2.0 (2.14.0-2) unstable; urgency=low
.
  * Upload to unstable; drop check-dist include.
.
glib2.0 (2.14.0-1) experimental; urgency=low
.
  * Fix double --host/--build flags to configure.
  * Update patch 67_gcc43-inline to also fix the headers for GCC 4.2.
  * New upstream major stable release; API additions.
    - Bump up shlibs to >= 2.14.0.
    - Drop patch 90_from_svn_fix_missing_pointer_casting, merged upstream.
    - New patch, 90_fix-abi-check-with-debug, fixes build of testsuite in
      debug mode; from SVN.
.
glib2.0 (2.13.7-3) experimental; urgency=low
.
  * debian/patches/90_from_svn_fix_missing_pointer_casting.patch:
    - patch from SVN, "fixed missing pointer casts when using atomic ops."
      (Closes: #434853)
.
glib2.0 (2.13.7-2) experimental; urgency=low
.
  * Bump shlibs to 2.13.7.
.
glib2.0 (2.13.7-1) experimental; urgency=low
.
  * Drop "libtool_is_fool" snippet patching hardcode_libdir_flag_spec and
    archive_cmds which is probably dangerous with newer libtools.
  * Fix flavor name in a comment of debian/rules.
  * Use -s instead of -a in arch-specific dh_* calls.
  * New upstream development release; some API additions.
    - Drop patch 60_output-lines-during-tests, merged upstream.
  * New patch, 60_wait-longer-for-threads-to-die, to wait 5 seconds instead of
    one for threads to die in the threadpool test; hopefully fixes hppa and
    kfreebsd testsuite failures; see #428674 and #431720.
  * Don't make testsuite failures fatal on hppa; closes: #431720.
.
glib2.0 (2.13.6-1) experimental; urgency=low
.
  * Don't pass -L to dh_shlibdeps as the shlibs.local trick is enough and this
    can result in duplicate deps; closes: #317461.
  * Set myself as maintainer.
  * Cleanups.
  * Make the testsuite failures fatal on arches which passed the testsuite
    with 2.13.5 in experimental (currently: alpha amd64 arm hppa i386 ia64
    mips powerpc s390); closes: #291486.
  * Don't run the testsuite when cross-compiling.
  * New upstream development release; only API change is to change back the
    definition of GType for C++ to be gulong.
.
glib2.0 (2.13.5-1) experimental; urgency=low
.
  * New upstream release
   - Bump shlibs to >= 2.13.5, as the API was changed
.
glib2.0 (2.13.4-2) experimental; urgency=low
.
  * New patch, 67_gcc43-inline, fixes FTBFS of apps using glib with GCC 4.3
    which uses C99 where the meaning of "inline" changed; patch was adapted
    from patches in GNOME #315437 and Gentoo #156475; closes: #416863.
.
glib2.0 (2.13.4-1) experimental; urgency=low
.
  * Also honor parallel=n in DEB_BUILD_OPTIONS.
  * New upstream release series; these are development releases, the new API
    may still change incompatibly.
    - Target at experimental; include check-dist.
    - Bump up shlibs to >= 2.13.4.
  * New patch but disabled, 01_gettext-desktopfiles, permits overriding the
    gettext domain when desktop files have such a field; found in the Ubuntu
    package.
.
glib2.0 (2.12.12-1) unstable; urgency=low
.
  * Fix description of the -dbg package.
  * New upstream release.
.
glib2.0 (2.12.11-3) unstable; urgency=medium
.
  * Initialize CFLAGS to -Wall -g; pass debian/rules' CFLAGS and LDFLAGS to
    configure, doh!
  * Track all stable versions in watch file.
  * Wrap build-deps and deps.
  * Add ${misc:Depends}.
  * New patch 60_output-lines-during-tests, outputs newlines after thousand
    iterations of the inner-loop of the closures test to avoid the timeout on
    mips and mipsel buildds.
.
glib2.0 (2.12.11-2) unstable; urgency=low
.
  * Run "make check" test suite for the deb flavor except if DEB_BUILD_OPTIONS
    contains the "nocheck" keyword; ignore failures.
  * Include the new uploaders.mk from gnome-pkg-tools instead of duplicating
    its logic; build-dep on gnome-pkg-tools >= 0.11.
  * Drop useless version computations.
  * Add support for DEB_BUILD_OPTIONS_PARALLEL.
  * Upload to unstable; drop check-dist include.
.
glib2.0 (2.12.11-1) experimental; urgency=medium
.
  * New upstream release; no API change.
.
glib2.0 (2.12.10-1) experimental; urgency=low
.
  * Include the new check-dist Makefile to prevent accidental uploads to
    unstable; bump build-dep on gnome-pkg-tools to >= 0.10.
  * New upstream release; no API change.
    - Rewrite and cleanup the build-system completely to build a set of
      flavors; drop obsolete targets; drop obsolete files; switch from
      tar-in-tar and sys-build to regular source and quilt patching;
      build-depend on quilt; drop DEB_USE_DBS_TARBALL_LAYOUT; create stampdir
      when necessary; switch from dh_movefiles and dh_installdirs to
      dh_install.
    - Drop patch 000_glib-link; merged upstream.
  * Bump up Debhelper compatibility level to 5.
  * Only ship README.Debian in libglib2.0-dev.
  * Empty dependency_libs in the *.la files of libglib2.0-dev.
  * Override shlibs for the inter-shlibdeps before computing them.
  * Use >= ${source:Version} and ${binary:Version} for inder-deps; build-dep
    on dpkg-dev >= 1.13.19.
  * Fix --dbg-package name.
  * Use make vars for package names.
  * Tune udeb description.
  * Clean /usr/share/doc symlinks generation and move to dh_link generated
    links.
  * Cleanup list of invoked dh_* commands.
.
glib2.0 (2.12.9-2) experimental; urgency=low
.
  * Bump shlibs to >= 2.12.9.
  * Avoir overwriting the *.la files of the main build with the *.la files of
    the udeb build; fixes "old_library" in *.la files; thanks Tim Dijkstra;
    closes: #297741.
.
glib2.0 (2.12.9-1) experimental; urgency=low
.
  * Add a get-orig-source target to retrieve the upstream tarball.
  * New upstream releases; no API change.
    - Fixes documentation of g_key_file_set_string_list(); closes: #405028.
    - Avoids spewing warnings with gcc 2.95; closes: #303124.
    - Drop patch 009_accept-space-in-key-names; merged and adapted upstream.
.
glib2.0 (2.12.7-1) experimental; urgency=low
.
  * New upstream release; no API change; translation updates, bug fixes,
    build fixes.
    - Target at experimental for now.
    - Drop patch 010_restore-old-key-file-syntax-support, merged and adapted
      upstream.
.
glib2.0 (2.12.6-2) unstable; urgency=medium
.
  * New patch, 010_restore-old-key-file-syntax-support, reverts strict group
    names and key names checks introduced between glib 2.12.4 and 2.12.6;
    instead of failing, critical warnings are output; updates the relevant
    tests as well; closes: #404888.
  * New patch, 009_accept-space-in-key-names, adds support for space in key
    names (independently of 010_restore-old-key-file-syntax-support); updates
    and add relevant tests as well; closes: #404888 as well.
.
glib2.0 (2.12.6-1) unstable; urgency=low
.
  * New upstream release; no API or ABI change.
    - Fixes file-type detection in nautilus; closes: #404015.
.
glib2.0 (2.12.5-3) unstable; urgency=low
.
  * Upload to unstable.
.
glib2.0 (2.12.5-2) experimental; urgency=low
.
  * Upload to unstable.
.
glib2.0 (2.12.5-1) experimental; urgency=low
.
  * Add cross-reference in 2.12.4-2.
  * New upstream release; no API or ABI change.
    - Target at experimental for now.
    - Drop patch 011_glib-gettext-datarootdir, merged upstream.
  * Drop patch 010_glib2.0.kfreebsd-amd64, is not needed anymore and seems to
    have been at the wrong level anyway.
  * Review and comment on the usefulness of patch 000_glib-link.
.
glib2.0 (2.12.4-2) unstable; urgency=low
.
  * New patch, 011_glib-gettext-datarootdir, to compute datarootdir
    appropriately for AM_GLIB_DEFINE_LOCALEDIR; GNOME #343825;
    closes: #370282.
.
glib2.0 (2.12.4-1) unstable; urgency=low
.
  * New upstream release; no API changes.
.
glib2.0 (2.12.3-2) unstable; urgency=low
.
  * Upload to unstable
.
  [ Loic Minier]
  * Merge 2.10.3-3.
.
glib2.0 (2.12.3-1) experimental; urgency=low
.
  * New upstream release; no public API changes.
  * Broaden the -data dep on the lib to permit bin NMUs.
.
glib2.0 (2.12.2-1) experimental; urgency=low
.
  * New upstream release; no API changes.
.
glib2.0 (2.12.1-1) experimental; urgency=low
.
  * New upstream release.
  * Sync with overrides and set udeb's Priority to optional instead of extra.
  * Bump up Standards-Version to 3.7.2.
.
glib2.0 (2.12.0-1) experimental; urgency=low
.
  * New upstream version:
    Major new features include:
    * The Unicode support has been updated to Unicode 5.
    * GBookmarkFile: a parser for files containing bookmarks
      stored using the Desktop Bookmark specification
    * Base64 encoding support
  * debian/rules:
    - updated shver number
  * debian/watch:
    - updated
.
glib2.0 (2.10.3-3) unstable; urgency=low
.
  * debian/patches/999_ia64_atomic_ops_broken.patch:
    - dropped, it's not required with the new gcc and it was breaking the build
      (Closes: #376260)
.
  [ Loic Minier ]
  * Sync with overrides and set udeb's Priority to optional instead of extra.
.
glib2.0 (2.10.3-2) unstable; urgency=medium
.
  * Re-add changes from 2.10.2-2 that were lost in the wild
    (closes: #361697).
.
glib2.0 (2.10.3-1) unstable; urgency=low
.
  * New upstream version:
    Bugs fixed:
    - g_completion_complete_utf8 crashes when NULL is passed to it
    - update-desktop-database doesn't handle duplicate entries
      (Closes: #298668)
    - Dereferencing NULL value in g_key_file_get_group_comment
    - GKeyFile set_string_list invalid memory reads
    - The GObject tutorial say g_object_(un)ref is _not_  thread-safe
    - Fix a memory leak in GOption
.
glib2.0 (2.10.2-2) unstable; urgency=low
.
  * debian/control.in, debian/rules:
    - patch by Frans Pop <aragorn@tiscali.nl>
    - Add support for udeb dependency resolution in shlibs file
      (Closes: #361697).
    - Simplify debian/rules by making use of udeb support in debhelper.
  * debian/control.in:
    - clarify the description for the -data package (Closes: #362316),
      change suggested Robert Bihlmeyer <robbe@orcus.priv.at>
.
glib2.0 (2.10.2-1) unstable; urgency=low
.
  * New upstream version:
    - Missing check for .dylib
    - Segmentation Fault when %llu is passed to vasnprintf and HAVE_SNPRINTF
      is not defined
    - Add support for write FDs to GIOChannel
    - Memleak in goption.c::parse_short_option
    - g_parse_debug_string reads beyond buffer
    - g_option_context_parse() should not set program name to '<Unknown>' if
      it is already set
    - g_main_context_unref calls g_source_destroy_internal with incorrect
      arguments
    - Slight performance gains (GList, GAsyncQueue)
    - Use of unitialised memory in g_mem_profile
    - make check FAIL: threadpool-test
    - g_option_context_new parameter lacks better explanation
    - Some breakages with GThreadPool
    - gthread/gthread-win32.c: IsDebuggerPresent needs
      '#define _WIN32_WINDOWS 0x0401'
    - dlerror() portability issue causes crash on (old) a.out NetBSD platform
    - g_timer_elapsed docs should mention that microseconds may be NULL
    - goption + error out params
    - Documentation should not reference G_HAVE_GINT64, as it's deprecated.
  * debian/patches/010_glib2.0.kfreebsd-amd64.patch:
    - patch by Aurelien Jarno <aurel32@debian.org>, fix build on kfreebsd-amd64
      (Closes: #355953)
  * debian/rules:
    - use "-g" for CFLAGS, makes -dbg package useful again
    change by Fabio M. Di Nitto <fabbione@ubuntu.com> on the Ubuntu package:
    * Make sure to pass CFLAGS to configure.
    * Generalize DEB_BUILD_ARCH.
.
glib2.0 (2.10.1-2) unstable; urgency=low
.
  [ Sjoerd Simons ]
  * Upload to unstable
  * Document udeb changes that Josselin did in an earlier experimental
    package.
  * debian/patches/999_ia64_atomic_ops_broken.patch
    + Added. Uses atomic builtins that gcc-4.0 know on ia64, instead of those
    for gcc-4.1. (Patch by LaMont Jones from the ubuntu package)
  * Updated debian/watch to use download.gnome.org
.
  [ Josselin Mouette ]
  * Set the conflict with pango < 1.11, that's where the breakage lies.
  * Add a XC-Package-Type header to the udeb and set the priority to extra.
    [debian/control.in]
.
glib2.0 (2.10.1-1) experimental; urgency=low
.
  * New upstream release (bugfixes, translation updates).
  * [debian/rules] Bring priority parameter for dpkg-distaddfile for the udeb
    in line with control.in .
.
  Josselin Mouette <joss@debian.org>:
  * Conflict with pango < 1.10 to avoid breakage caused by the unicode
    changes.
.
glib2.0 (2.10.0-1) experimental; urgency=low
.
  * New upstream release.
.
glib2.0 (2.8.6-1) unstable; urgency=medium
.
  * New upstream release (bugfixes, translation updates).
.
glib2.0 (2.8.5-1) unstable; urgency=low
.
  * New upstream release (bugfixes, translation updates,
    g_object_compat_control() added).
  * [debian/rules] Bumped shver to 2.8.5 to reflect the API change.
.
glib2.0 (2.8.4-2) unstable; urgency=high
.
  * Fix shlibs deps that crept in the amd64 package, thanks Kurt Roeckx for
    all the fish. (Closes: #339685)
    - Cleanup and clarify upstream version calculations.
    - Drop dh_makeshlibs -a call as only one package ships shlibs and already
      has a separate call.
    - Drop useless shlibs.local generation.
    - Call dh_shlibdeps with cleaner arguments.
    [debian/rules]
  * Fix "fakeroot debian/rules clean" by following find calls with a .svn
    filter.
    [debian/scripts/lib]
  * Fix quoting of unfix.source.patch:START and FAILED messages.
    [debian/scripts/messages]
  * Clarify Copyright versus License and update upstream URL.
    [debian/copyright]
.
glib2.0 (2.8.4-1) unstable; urgency=low
.
  * New upstream version.
.
glib2.0 (2.8.3-1) unstable; urgency=medium
.
  * New upstream release (fix an error that crept in with a change to
    glib-mkenums in 2.8.2, documentation improvements, translation updates).
.
glib2.0 (2.8.2-1) unstable; urgency=medium
.
  * New upstream release (bug fixes, documentation improvements, translation
    updates).
.
glib2.0 (2.8.1-1) unstable; urgency=medium
.
  * New (for Debian) upstream version (bug fixes, documentation improvements,
    translation updates).
  * [debian/control.in] Bumped Standards-Version.
  * [debian/copyright] Updated FSF's address.
.
glib2.0 (2.8.1-0ubuntu1) breezy; urgency=low
.
  * New upstream version.
  * debian/watch:
    - updated.
.
glib2.0 (2.8.0-1) unstable; urgency=low
.
  * New upstream version.
  * debian/rules:
    - updated the shlibs.
.
glib2.0 (2.7.3-1) experimental; urgency=low
.
  * New upstream version.
.
glib2.0 (2.7.2-1) experimental; urgency=low
.
  * New upstream version.
.
glib2.0 (2.7.1-1) experimental; urgency=low
.
  * New upstream version.
  * debian/rules:
    - updated the shlib.
.
glib2.0 (2.7.0-1) experimental; urgency=low
.
  * New upstream version:
    * GKeyFile:
    - add unit tests.
    - accept \r\n as line end.
    - don't interpret leading zeros as octal numbers.
    - make key and group removal work.
    * GOption:
    - improve formatting of --help output.
    - accept -?.
    - warn about duplicate main groups.
    - treat '-' as non-option argument.
    - report missing arguments as errors.
    - add a boxed type for GDate.
    * GTree:
    - g_tree_remove() and g_tree_steal() return status information.
    * Stdio wrappers:
    - work regardless of large file support.
    - add g_access(), g_chmod(), g_creat(), g_chdir.
    * GObject:
    - implement "toggle references" to help language bindings.
    - allow to mark names, nicks and blurbs of pspecs as static.
    - make pspec lookup a bit faster.
    * add g_listenv() to list all set environment variables.
    * add g_file_set_contents() to atomically write a file.
    * add g_try_malloc(), g_try_new(), g_try_new0() and g_try_renew().
    * add g_utf8_collate_key_for_filename() to sort filenames taking
      extensions and numeric suffixes into account.
    * add G_GNUC_NULL_TERMINATED to mark varargs function with
      NULL-terminated argument lists.
    * documentation improvements.
    * new and updated translations.
  * debian/rules:
    - updated the shlibs.
  * debian/watch:
    - updated.
.
glib2.0 (2.6.5-1) unstable; urgency=low
.
  * New upstream release again bringing a number of bugfixes, improved
    documentation and updated translations, including
    gthread-posix.c (g_thread_create_posix_impl): Allow setstacksize to
    fail.  (GNOME #304790, Michael Banck) (Closes: #312382)
  * [debian/patches/000_glib-link.patch] Updated.
.
glib2.0 (2.6.4-1) unstable; urgency=low
.
  * New upstream release bringing a number of bugfixes, improved
    documentation and updated translations.
.
glib2.0 (2.6.3-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.6.2-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.6.1-3) unstable; urgency=low
.
  * debian/rules:
    - use "-plibglib$(apiver)-udeb", fix the libglib2.0-0-dbg package.
.
glib2.0 (2.6.1-2) unstable; urgency=low
.
  * Upload to unstable.
  * debian/control.in:
    - rename libglib2.0-dbg to libglib2.0-0-dbg.
    - set myself as maintainer.
  * debian/rules:
    - use dh_strip to make the debug package.
.
glib2.0 (2.6.1-1) experimental; urgency=low
.
  * New upstream release.
.
glib2.0 (2.6.0-1) experimental; urgency=low
.
  * New upstream release.
  * debian/rules:
    - updated the shlibs.
  * debian/watch:
    - updated.
.
glib2.0 (2.4.8-1) unstable; urgency=medium
.
  * New upstream bugfix release.
.
glib2.0 (2.4.7-1) unstable; urgency=medium
.
  * New upstream bugfix release.
  * [debian/patches/000_glib-link.patch] Updated.
  * [debian/patches/001_translations.patch] Dropped.
.
glib2.0 (2.4.6-4) unstable; urgency=medium
.
  * [debian/patches/001_translations.patch] Updated translations from CVS and
    relibtoolise to use new translations.
  * [debian/rules] Fixed udeb naming on Hurd.
.
glib2.0 (2.4.6-3) unstable; urgency=medium
.
  Colin Watson <cjwatson@debian.org>: (Closes: #274053)
  * [debian/rules] binary-arch depends on binary-arch-udeb.
  * [debian/rules] Strip udeb!
.
glib2.0 (2.4.6-2) unstable; urgency=medium
.
  * [debian/patches/001_translations.patch] Updated translations from CVS.
  * [debian/rules] Tightened "shver" to tighten shlibs, as some
    incompatibilities with older versions turned up with gconf.
    (Closes: #265659)
.
glib2.0 (2.4.6-1) unstable; urgency=medium
.
  * New upstream bugfix release.
.
glib2.0 (2.4.5-2) unstable; urgency=low
.
  * debian/patches/000_glib-link.patch:
    - patch from Jurij Smakov <jurij@wooyd.org> to link with all the libs
      (Closes: #263130).
.
glib2.0 (2.4.5-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.4.4-1) unstable; urgency=low
.
  * New upstream release.
    - remove spaces before "#pragma alloca" (Closes: #250667).
.
glib2.0 (2.4.2-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.4.1-2) unstable; urgency=low
.
  * Upload in unstable.
  * GNOME Team Upload.
  * J.H.M. Dassen (Ray) <jdassen@debian.org>:
    + [debian/rules] Make the linker work a bit harder so dynamic loading can
      be done faster; safety measure: ensure the build aborts when the library
      still has references to undefined symbols.
.
glib2.0 (2.4.1-1) experimental; urgency=low
.
  * New upstream release.
  * GNOME Team Upload.
  * debian/rules:
    - updated shlib version to 2.4.1.
.
glib2.0 (2.4.0-2) experimental; urgency=low
.
  * Akira TAGOH <tagoh@debian.org>
  - debian/rules:
    - bumped shlib version to 2.4.0.
.
glib2.0 (2.4.0-1) experimental; urgency=low
.
  * New upstream release.
  * debian/rules:
    - doh. don't claim the newer shlibs.
  * debian/control:
    - added Uploaders to maintain as team.
    - added gnome-pkg-tools to Build-Depends.
  * debian/docs:
    - added old ChangeLog and NEWS files.
.
glib2.0 (2.2.3-1) unstable; urgency=low
.
  * "Welcome back my laptop PC!" release.
  * New upstream release.
  * debian/control:
    - bumped Standards-Version to 3.6.1.0.
.
glib2.0 (2.2.2-1) unstable; urgency=low
.
  * New upstream release.
    - Fix portability problems with G_MIN/MAX_INT64 (closes: Bug#195302)
  * debian/control:
    - bumped Standards-Version to 3.5.10.0.
    - changed the sections for libglib2.0-dev and libglib2.0-dbg to libdevel.
  * debian/compat:
    - use it instead of DH_COMPAT.
.
glib2.0 (2.2.1-3) unstable; urgency=low
.
  * debian/control:
    - rename libglib2.0-0-udeb to libglib2.0-udeb.
    - delete Recommends line from libglib2.0-udeb. (closes: Bug#183749)
    - add Provides: libglib2.0-0 for libglib2.0-udeb.
  * debian/libglib2.0-udeb.files:
    - contain the libraries and locale data.
.
glib2.0 (2.2.1-2) unstable; urgency=low
.
  * debian/rules:
    - create the symlinks on /usr/share/gtk-doc/html. (closes: Bug#183504)
    - changed DH_COMPAT to 4.
  * debian/control:
    - add libglib2.0-0-udeb package for debian-installer.
.
glib2.0 (2.2.1-1) unstable; urgency=low
.
  * New upstream release.
  * debian/control:
    - needed pkg-config (>= 0.14.0).
    - add autotools-dev to Build-Depends.
.
glib2.0 (2.2.0-2) unstable; urgency=low
.
  * close to be fixed in the upstream release. (closes: Bug#173508)
.
glib2.0 (2.2.0-1) unstable; urgency=low
.
  * New upstream release.
  * debian/control:
    bumped Standards-Version to 3.5.8.
.
glib2.0 (2.0.7-1) unstable; urgency=low
.
  * New upstream release.
  * debian/control:
    - changed libc6-dev to libc6-dev | libc-dev in -dev's Depends.
    - bumped Standards-Version and depends debhelper (>> 4).
    - add libgtk2.0-doc to Suggests for -doc.
  * debian/rules:
    - add symlink to fix the missing symlink for gtk. but this release doesn't
      include the hyperlink for gtk+ (closes: Bug#162845)
    - support noopt option for DEB_BUILD_OPTIONS.
.
glib2.0 (2.0.6-1) unstable; urgency=low
.
  * New upstream release.
  * debian/rules: removed --enable-debug option. conform to the default value
    now. (closes: Bug#151815)
  * debian/patches/000_glib2.0-garray.patch: removed because it's merged by
    the upstream.
.
glib2.0 (2.0.4-3) unstable; urgency=low
.
  * debian/patches/000_glib2.0-garray.patch:
    applied to fix g_ptr_array_index() macro. (closes: Bug#150521)
.
glib2.0 (2.0.4-2) unstable; urgency=low
.
  * debian/libglib2.0-doc.doc-base.gobject: fix the dupplicated title.
    (closes: Bug#150040)
.
glib2.0 (2.0.4-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.0.3-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.0.1-2) unstable; urgency=low
.
  * debian/scripts/vars.build: fix bashism.
  * debian/README.Debian: add static link issue.
  * debian/rules: add --enable-static. (closes: Bug#142198)
.
glib2.0 (2.0.1-1) unstable; urgency=low
.
  * New upstream release.
.
glib2.0 (2.0.0-1) unstable; urgency=low
.
  * Initial Release.
This commit is contained in:
Marc Deslauriers 2023-06-08 10:15:59 -04:00 committed by evinadmin
parent 4ef3ff9793
commit 0140d3c4f1
90 changed files with 18290 additions and 0 deletions

6580
debian/changelog vendored Normal file

File diff suppressed because it is too large Load diff

6
debian/clean vendored Normal file
View file

@ -0,0 +1,6 @@
debian/cross.txt
debian/cross.txt.in
debian/libglib2.0-0.triggers
debian/libglib2.0-0.postinst
debian/libglib2.0-0.postrm
gio/gdbus-2.0/codegen/*.pyc

216
debian/clean-up-unmanaged-libraries vendored Executable file
View file

@ -0,0 +1,216 @@
#!/bin/dash
# (This script requires either dash or bash due to its use of test -ef.)
# Copyright 2020 Collabora Ltd.
# SPDX-License-Identifier: MIT
# (see "Expat" paragraph in debian/copyright)
set -eu
# global
bug_ref=911225
force=
me="$0"
need_ldconfig=
really=yes
verbose=
debug () {
[ -z "$verbose" ] || echo "DEBUG: $me: $*" >&2
}
warning () {
echo "WARNING: $me: $*" >&2
}
usage () {
local status="${1:-2}"
if [ "$status" -gt 0 ]; then
exec >&2
fi
cat <<EOF
Usage: $me [OPTIONS] MULTIARCH SONAME...
Clean up unmanaged copies of SONAME that might still exist
in /lib/MULTIARCH after upgrading to a version that is in
/usr/lib/MULTIARCH. On non-merged-/usr systems, because /lib/MULTIARCH
is higher-precedence than /usr/lib/MULTIARCH, that can result in the
old version continuing to be used, breaking versioned dependencies.
See #911225, #949395 and related bugs.
Options:
--bug-ref=BUG Mention BUG in log messages
--dry-run Don't remove the files, just report
--force Run even if the system is merged-/usr
--verbose Be more verbose
EOF
exit "$status"
}
do_soname () {
local multiarch="$1"
local soname="$2"
local impl
local owner
local removal="/lib/$multiarch/removed-by-upgrade-bug$bug_ref"
local found_one=
# We had better not remove the only copy of $soname. This script is
# for the situation where it moved from /lib/MULTIARCH/SONAME to
# /usr/lib/MULTIARCH/SONAME, so fail in all other cases.
if ! [ -e "/usr/lib/$multiarch/$soname" ]; then
warning "/usr/lib/$multiarch/$soname does not exist"
return 1
fi
# Safety-catch against problems with dpkg-query: if no package is said
# to own the new version of the library, fail early.
if owner=$(dpkg-query -S "/usr/lib/$multiarch/$soname"); then
owner="${owner%%:*}"
debug "/usr/lib/$multiarch/$soname is owned by $owner"
else
warning "/usr/lib/$multiarch/$soname is not owned by a package?"
return 1
fi
for impl in "/lib/$multiarch/$soname".*; do
if ! [ -e "$impl" ]; then
continue
fi
found_one=yes
if owner=$(dpkg-query -S "$impl"); then
owner="${owner%%:*}"
warning "$impl is owned by $owner, not deleting"
continue
fi
if [ "/usr$impl" -ef "$impl" ] && owner=$(dpkg-query -S "/usr$impl"); then
owner="${owner%%:*}"
warning "/usr$impl is owned by $owner, not deleting"
continue
fi
warning "$impl is not owned by any package"
warning "Related files:"
ls -il \
"/lib/$multiarch/$soname" \
"/lib/$multiarch/$soname".* \
"/usr/lib/$multiarch/$soname" \
"/usr/lib/$multiarch/$soname".* \
>&2 || :
if [ -n "$really" ]; then
warning "Moving $impl into $removal"
install -d "$removal"
rm -f "$removal/${impl##*/}"
mv "$impl" "$removal/."
else
warning "Not moving $impl into $removal (--dry-run)"
fi
echo >&2
need_ldconfig=yes
done
if [ -z "$found_one" ]; then
debug "No stray files found at /lib/$multiarch/$soname.*"
fi
}
main () {
local getopt_temp
local multiarch
local soname
getopt_temp="help"
getopt_temp="$getopt_temp,bug-ref:"
getopt_temp="$getopt_temp,dry-run"
getopt_temp="$getopt_temp,force"
getopt_temp="$getopt_temp,verbose"
getopt_temp="$(getopt -o '' --long "$getopt_temp" -n "$me" -- "$@")"
eval "set -- $getopt_temp"
while [ "$#" -gt 0 ]
do
case "$1" in
(--dry-run)
really=
verbose=yes
shift
;;
(--bug-ref)
bug_ref="$2"
shift 2
;;
(--force)
force=yes
shift
;;
(--help)
usage 0
;;
(--verbose)
verbose=yes
shift
;;
(--)
shift
break
;;
(-*)
warning "Unknown option: $1"
usage 2
;;
(*)
break
;;
esac
done
if [ "$#" -lt 2 ]; then
warning "A multiarch tuple and at least one SONAME are required"
usage 2
fi
multiarch="$1"
shift
if [ -n "$force" ]; then
debug "Using force"
elif [ "/usr/lib/$multiarch" -ef "/lib/$multiarch" ]; then
# On a merged-/usr system, a new library like libglib-2.0.so.0.5000.0
# will take precedence over a stale library like
# libglib-2.0.so.0.4200.0 in the same directory without us needing
# to do anything, so the safe route is to avoid doing anything.
debug "Merged-/usr system, no need to do anything without --force"
return 0
fi
for soname in "$@"; do
do_soname "$multiarch" "$soname"
done
if [ -n "$need_ldconfig" ] && [ -n "$really" ]; then
warning "Changes were made, running ldconfig..."
ldconfig || ldconfig --verbose
elif [ -n "$need_ldconfig" ]; then
debug "Would run ldconfig, but skipped due to --dry-run"
fi
}
main "$@"
# vim:set sw=4 sts=4 et:

208
debian/control vendored Normal file
View file

@ -0,0 +1,208 @@
# This file is autogenerated. DO NOT EDIT!
#
# Modifications should be made to debian/control.in instead.
# This file is regenerated automatically in the clean target.
Source: glib2.0
Section: libs
Priority: optional
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
XSBC-Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Uploaders: Iain Lane <laney@debian.org>, Jeremy Bicha <jbicha@ubuntu.com>, Simon McVittie <smcv@debian.org>
Build-Depends: dbus <!nocheck> <!noinsttest>,
debhelper-compat (= 13),
dh-sequence-python3,
dh-sequence-gnome,
docbook-xml,
docbook-xsl,
dpkg-dev (>= 1.17.14),
gettext,
libdbus-1-dev (>= 1.2.14) <!nocheck> <!noinsttest>,
libelf-dev (>= 0.142),
libffi-dev (>= 3.3),
libgamin-dev [hurd-any] | libfam-dev [hurd-any],
libmount-dev (>= 2.35.2-7~) [linux-any],
libpcre3-dev (>= 1:8.35),
libselinux1-dev [linux-any],
libxml2-utils,
linux-libc-dev [linux-any],
meson (>= 0.52.0),
pkg-config (>= 0.16.0),
python3-distutils,
python3:any (>= 2.7.5-5~),
xsltproc,
zlib1g-dev
Build-Depends-Arch: desktop-file-utils <!nocheck>,
locales <!nocheck> | locales-all <!nocheck>,
python3-dbus <!nocheck>,
python3-gi <!nocheck>,
shared-mime-info <!nocheck>,
tzdata <!nocheck>,
xterm <!nocheck>
Build-Depends-Indep: gtk-doc-tools (>= 1.32.1),
Rules-Requires-Root: no
Standards-Version: 4.6.0
Homepage: https://wiki.gnome.org/Projects/GLib
XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/glib
XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/glib.git
Vcs-Browser: https://salsa.debian.org/gnome-team/glib/tree/ubuntu/jammy
Vcs-Git: https://salsa.debian.org/gnome-team/glib.git -b ubuntu/jammy
Package: libglib2.0-0
Architecture: any
Depends: ${misc:Depends},
${shlibs:Depends}
Recommends: libglib2.0-data,
shared-mime-info,
xdg-user-dirs
Breaks: gimp (<< 2.10.14-3~),
glib-networking-tests (<< 2.70.0~),
gnome-keyring (<< 40.0-3~),
libgio-fam (<< 2.64.1-2~) [kfreebsd-any hurd-any],
libgirepository-1.0-1 (<< 1.62.0-4~),
libgladeui-2-6 (<< 3.22.2),
libsoup2.4-tests (<< 2.72.0-3~),
Replaces: libgio-fam (<< 2.64.1-2~) [kfreebsd-any hurd-any]
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
Description: GLib library of C routines
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the shared libraries.
Package: libglib2.0-tests
Build-profiles: <!noinsttest>
Architecture: any
Depends: gir1.2-glib-2.0,
libglib2.0-dev-bin,
python3-dbus,
python3-dbusmock,
python3-gi,
shared-mime-info,
${misc:Depends},
${python3:Depends},
${shlibs:Depends}
Recommends: xdg-desktop-portal,
Pre-Depends: ${misc:Pre-Depends}
Description: GLib library of C routines - installed tests
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains test programs, designed to be run as part of a
regression testsuite.
Package: libglib2.0-udeb
Build-Profiles: <!noudeb>
Section: debian-installer
Package-Type: udeb
Architecture: any
Depends: ${misc:Depends},
${shlibs:Depends}
Description: GLib library of C routines - minimal runtime
This is a udeb, or a microdeb, for the debian-installer.
.
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the minimal runtime library needed by the Debian
installer.
Package: libglib2.0-bin
Section: misc
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends: libglib2.0-data,
${misc:Depends},
${shlibs:Depends}
Multi-Arch: foreign
Description: Programs for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the program files which is used for the libraries
and others.
Package: libglib2.0-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: libffi-dev (>= 3.3),
libglib2.0-0 (= ${binary:Version}),
libglib2.0-bin (= ${binary:Version}),
libglib2.0-dev-bin (= ${binary:Version}),
libmount-dev (>= 2.35.2-7~) [linux-any],
libpcre3-dev (>= 1:8.31),
libselinux1-dev [linux-any],
pkg-config,
zlib1g-dev,
${misc:Depends},
${python3:Depends},
${shlibs:Depends}
Breaks: libglib2.0-0-dbg (<< 2.51.4-1~)
Replaces: libglib2.0-0-dbg (<< 2.51.4-1~)
Suggests: libgirepository1.0-dev (>= 1.62),
libglib2.0-doc
Description: Development files for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package is needed to compile programs against libglib2.0-0,
as only it includes the header files and static libraries (optionally)
needed for compiling.
.
GObject-Introspection metadata for this library can be found in the
libgirepository1.0-dev package.
Package: libglib2.0-dev-bin
Section: libdevel
Architecture: any
Depends: python3-distutils,
${misc:Depends},
${python3:Depends},
${shlibs:Depends}
Suggests: libgdk-pixbuf2.0-bin (>= 2.36.12-2~) | libgdk-pixbuf2.0-dev,
libxml2-utils
Breaks: libglib2.0-bin (<< 2.54.2-5~),
libglib2.0-dev (<< 2.53)
Replaces: libglib2.0-bin (<< 2.54.2-5~),
libglib2.0-dev (<< 2.53)
Multi-Arch: foreign
Description: Development utilities for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package is needed to compile programs against libglib2.0-0. It contains
development utilities typically run during compilation and should not be
installed directly. Use libglib2.0-dev instead.
Package: libglib2.0-data
Architecture: all
Depends: ${misc:Depends}
Multi-Arch: foreign
Description: Common files for GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package is needed for the runtime libraries to display messages in
languages other than English.
Package: libglib2.0-doc
Section: doc
Architecture: all
Depends: ${misc:Depends}
Suggests: devhelp
Multi-Arch: foreign
Description: Documentation files for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the HTML documentation for the GLib library
in /usr/share/doc/libglib2.0-doc/ .

204
debian/control.in vendored Normal file
View file

@ -0,0 +1,204 @@
Source: glib2.0
Section: libs
Priority: optional
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
XSBC-Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Uploaders: @GNOME_TEAM@, Simon McVittie <smcv@debian.org>
Build-Depends: dbus <!nocheck> <!noinsttest>,
debhelper-compat (= 13),
dh-sequence-python3,
dh-sequence-gnome,
docbook-xml,
docbook-xsl,
dpkg-dev (>= 1.17.14),
gettext,
libdbus-1-dev (>= 1.2.14) <!nocheck> <!noinsttest>,
libelf-dev (>= 0.142),
libffi-dev (>= 3.3),
libgamin-dev [hurd-any] | libfam-dev [hurd-any],
libmount-dev (>= 2.35.2-7~) [linux-any],
libpcre3-dev (>= 1:8.35),
libselinux1-dev [linux-any],
libxml2-utils,
linux-libc-dev [linux-any],
meson (>= 0.52.0),
pkg-config (>= 0.16.0),
python3-distutils,
python3:any (>= 2.7.5-5~),
xsltproc,
zlib1g-dev
Build-Depends-Arch: desktop-file-utils <!nocheck>,
locales <!nocheck> | locales-all <!nocheck>,
python3-dbus <!nocheck>,
python3-gi <!nocheck>,
shared-mime-info <!nocheck>,
tzdata <!nocheck>,
xterm <!nocheck>
Build-Depends-Indep: gtk-doc-tools (>= 1.32.1),
Rules-Requires-Root: no
Standards-Version: 4.6.0
Homepage: https://wiki.gnome.org/Projects/GLib
XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/glib
XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/glib.git
Vcs-Browser: https://salsa.debian.org/gnome-team/glib/tree/ubuntu/jammy
Vcs-Git: https://salsa.debian.org/gnome-team/glib.git -b ubuntu/jammy
Package: libglib2.0-0
Architecture: any
Depends: ${misc:Depends},
${shlibs:Depends}
Recommends: libglib2.0-data,
shared-mime-info,
xdg-user-dirs
Breaks: gimp (<< 2.10.14-3~),
glib-networking-tests (<< 2.70.0~),
gnome-keyring (<< 40.0-3~),
libgio-fam (<< 2.64.1-2~) [kfreebsd-any hurd-any],
libgirepository-1.0-1 (<< 1.62.0-4~),
libgladeui-2-6 (<< 3.22.2),
libsoup2.4-tests (<< 2.72.0-3~),
Replaces: libgio-fam (<< 2.64.1-2~) [kfreebsd-any hurd-any]
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
Description: GLib library of C routines
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the shared libraries.
Package: libglib2.0-tests
Build-profiles: <!noinsttest>
Architecture: any
Depends: gir1.2-glib-2.0,
libglib2.0-dev-bin,
python3-dbus,
python3-dbusmock,
python3-gi,
shared-mime-info,
${misc:Depends},
${python3:Depends},
${shlibs:Depends}
Recommends: xdg-desktop-portal,
Pre-Depends: ${misc:Pre-Depends}
Description: GLib library of C routines - installed tests
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains test programs, designed to be run as part of a
regression testsuite.
Package: libglib2.0-udeb
Build-Profiles: <!noudeb>
Section: debian-installer
Package-Type: udeb
Architecture: any
Depends: ${misc:Depends},
${shlibs:Depends}
Description: GLib library of C routines - minimal runtime
This is a udeb, or a microdeb, for the debian-installer.
.
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the minimal runtime library needed by the Debian
installer.
Package: libglib2.0-bin
Section: misc
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends: libglib2.0-data,
${misc:Depends},
${shlibs:Depends}
Multi-Arch: foreign
Description: Programs for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the program files which is used for the libraries
and others.
Package: libglib2.0-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: libffi-dev (>= 3.3),
libglib2.0-0 (= ${binary:Version}),
libglib2.0-bin (= ${binary:Version}),
libglib2.0-dev-bin (= ${binary:Version}),
libmount-dev (>= 2.35.2-7~) [linux-any],
libpcre3-dev (>= 1:8.31),
libselinux1-dev [linux-any],
pkg-config,
zlib1g-dev,
${misc:Depends},
${python3:Depends},
${shlibs:Depends}
Breaks: libglib2.0-0-dbg (<< 2.51.4-1~)
Replaces: libglib2.0-0-dbg (<< 2.51.4-1~)
Suggests: libgirepository1.0-dev (>= 1.62),
libglib2.0-doc
Description: Development files for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package is needed to compile programs against libglib2.0-0,
as only it includes the header files and static libraries (optionally)
needed for compiling.
.
GObject-Introspection metadata for this library can be found in the
libgirepository1.0-dev package.
Package: libglib2.0-dev-bin
Section: libdevel
Architecture: any
Depends: python3-distutils,
${misc:Depends},
${python3:Depends},
${shlibs:Depends}
Suggests: libgdk-pixbuf2.0-bin (>= 2.36.12-2~) | libgdk-pixbuf2.0-dev,
libxml2-utils
Breaks: libglib2.0-bin (<< 2.54.2-5~),
libglib2.0-dev (<< 2.53)
Replaces: libglib2.0-bin (<< 2.54.2-5~),
libglib2.0-dev (<< 2.53)
Multi-Arch: foreign
Description: Development utilities for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package is needed to compile programs against libglib2.0-0. It contains
development utilities typically run during compilation and should not be
installed directly. Use libglib2.0-dev instead.
Package: libglib2.0-data
Architecture: all
Depends: ${misc:Depends}
Multi-Arch: foreign
Description: Common files for GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package is needed for the runtime libraries to display messages in
languages other than English.
Package: libglib2.0-doc
Section: doc
Architecture: all
Depends: ${misc:Depends}
Suggests: devhelp
Multi-Arch: foreign
Description: Documentation files for the GLib library
GLib is a library containing many useful C routines for things such
as trees, hashes, lists, and strings. It is a useful general-purpose
C library used by projects such as GTK+, GIMP, and GNOME.
.
This package contains the HTML documentation for the GLib library
in /usr/share/doc/libglib2.0-doc/ .

107
debian/copyright vendored Normal file
View file

@ -0,0 +1,107 @@
This package was debianized by Akira TAGOH <tagoh@debian.org> on
Thu, 7 Mar 2002 01:05:25 +0900.
It was downloaded from <https://download.gnome.org/sources/glib/>.
Original Authors
----------------
Peter Mattis <petm@xcf.berkeley.edu>
Spencer Kimball <spencer@xcf.berkeley.edu>
Josh MacDonald <jmacd@xcf.berkeley.edu>
Please do not mail the original authors asking questions about this
version of GLib.
GLib Team
---------
Shawn T. Amundson <amundson@gimp.org>
Jeff Garzik <jgarzik@pobox.com>
Raja R Harinath <harinath@cs.umn.edu>
Tim Janik <timj@gtk.org>
Elliot Lee <sopwith@redhat.com>
Tor Lillqvist <tml@iki.fi>
Paolo Molaro <lupus@debian.org>
Havoc Pennington <hp@pobox.com>
Manish Singh <yosh@gimp.org>
Owen Taylor <otaylor@gtk.org>
Sebastian Wilhelmi <wilhelmi@ira.uka.de>
The random number generator "Mersenne Twister", which is used by GLib,
was developed and originally coded by:
Makoto Matsumoto <matumoto@math.keio.ac.jp>
Takuji Nishimura <nisimura@math.keio.ac.jp>
Major copyright holders:
Copyright © 1995-2021 Red Hat, Inc.
Copyright © 2008-2010 Novell, Inc.
Copyright © 2008-2010 Codethink Limited.
Copyright © 2008-2018 Collabora, Ltd.
Copyright © 2018 Endless Mobile, Inc.
Copyright © 2018 Emmanuele Bassi
License:
This package 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 of the License, or (at your option) any later version.
This package 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 package; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
On Debian systems, the complete text of the GNU Lesser General
Public License can be found in `/usr/share/common-licenses/LGPL'.
Files:
gobject/tests/taptestrunner.py
Copyright:
2015 Remko Tronçon
License: Expat
Files:
tests/gen-casefold-txt.py
tests/gen-casemap-txt.py
Copyright:
1998-1999 Tom Tromey
2001 Red Hat Software
License: GPL-2+
License: Expat
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
License: GPL-2+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
.
This program 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 General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.

2
debian/docs vendored Normal file
View file

@ -0,0 +1,2 @@
NEWS
README.md

18
debian/gbp.conf vendored Normal file
View file

@ -0,0 +1,18 @@
[DEFAULT]
pristine-tar = True
debian-branch = ubuntu/jammy
debian-tag = ubuntu/%(version)s
upstream-branch = upstream/2.72.x
[buildpackage]
sign-tags = True
[dch]
multimaint-merge = True
[import-orig]
postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit
upstream-vcs-tag = %(version%~%.)s
[pq]
patch-numbers = False

12
debian/gio-launch-desktop vendored Executable file
View file

@ -0,0 +1,12 @@
#!/bin/sh
# Fallback implementation of gio-launch-desktop. If we upgrade from a
# GLib version between 2.57.2 and 2.63.5, as long as that version is
# still loaded into some process, it requires this executable to launch
# .desktop files.
#
# This script will be removed after Ubuntu 20.04 and Debian 11 are released.
# Do not rely on it.
set -eu
export GIO_LAUNCHED_DESKTOP_FILE_PID="$$"
exec "$@"

2
debian/libglib2.0-0.dirs vendored Normal file
View file

@ -0,0 +1,2 @@
/usr/lib/${DEB_HOST_MULTIARCH}/gio/modules
/usr/share/glib-2.0/schemas

7
debian/libglib2.0-0.install vendored Normal file
View file

@ -0,0 +1,7 @@
usr/lib/*/libglib*.so.*
usr/lib/*/libgobject*.so.*
usr/lib/*/libgmodule*.so.*
usr/lib/*/libgthread*.so.*
usr/lib/*/libgio*.so.*
usr/bin/gio-querymodules usr/lib/${DEB_HOST_MULTIARCH}/glib-2.0
usr/bin/glib-compile-schemas usr/lib/${DEB_HOST_MULTIARCH}/glib-2.0

7
debian/libglib2.0-0.lintian-overrides vendored Normal file
View file

@ -0,0 +1,7 @@
# GObject uses GLib functions instead of using libc directly
libglib2.0-0: hardening-no-fortify-functions [usr/lib/*/libgobject-2.0.so.*]
# It's a deliberate choice of bundling them together
libglib2.0-0: package-name-doesnt-match-sonames libgio-2.0-0 libglib-2.0-0 libgmodule-2.0-0 libgobject-2.0-0 libgthread-2.0-0
# These empty directories are deliberate.
libglib2.0-0: package-contains-empty-directory usr/lib/*/gio/modules/
libglib2.0-0: package-contains-empty-directory usr/share/glib-2.0/schemas/

68
debian/libglib2.0-0.postinst.in vendored Normal file
View file

@ -0,0 +1,68 @@
#!/bin/sh
set -e
handle_triggers () {
local trigger
local dirs
for trigger in "$@"; do
if ! [ -d $trigger ]; then
continue
fi
case $trigger in
/usr/share/glib-2.0/schemas)
# This is triggered everytime an application installs a
# GSettings schema
"/usr/lib/#MULTIARCH#/glib-2.0/glib-compile-schemas" /usr/share/glib-2.0/schemas || true
;;
"/usr/lib/#MULTIARCH#/gio/modules")
# This is triggered everytime an application installs a GIO
# module into /usr/lib/#MULTIARCH#/gio/modules
"/usr/lib/#MULTIARCH#/glib-2.0/gio-querymodules" "/usr/lib/#MULTIARCH#/gio/modules" || true
;;
esac
done
}
cleanup () {
/usr/share/glib-2.0/clean-up-unmanaged-libraries \
--bug-ref=896019 \
"$@" \
"#MULTIARCH#" \
libglib-2.0.so.0
}
if [ "$1" = triggered ]; then
handle_triggers $2
exit 0
fi
# Clean up stale shared libraries on upgrades if necessary. Do this before running
# glib-compile-schemas, gio-querymodules.
# This workaround can be removed after Ubuntu 22.04 is released.
if [ -n "$2" ] && ! cleanup; then
echo "$0: Trying cleanup again with more logging..."
cleanup --verbose
fi
#DEBHELPER#
# This is shipped in the .deb (see debian/libglib2.0-0.dirs) but would
# be removed if empty during upgrade by old versions of the postrm (#987913).
# This workaround can be removed after Ubuntu 22.04 is released.
install -d "/usr/lib/#MULTIARCH#/gio/modules"
"/usr/lib/#MULTIARCH#/glib-2.0/glib-compile-schemas" /usr/share/glib-2.0/schemas || true
"/usr/lib/#MULTIARCH#/glib-2.0/gio-querymodules" "/usr/lib/#MULTIARCH#/gio/modules" || true
# Clean up pre-multiarch giomodule.cache.
# This workaround can be removed after Debian 12 and Ubuntu 22.04 are released.
if [ -d /usr/lib/gio/modules ]; then
rm -f /usr/lib/gio/modules/giomodule.cache
rmdir -p --ignore-fail-on-non-empty /usr/lib/gio/modules
fi
# vim:set sw=4 sts=4 et:

21
debian/libglib2.0-0.postrm.in vendored Normal file
View file

@ -0,0 +1,21 @@
#! /bin/sh
set -e
#DEBHELPER#
case "$1" in
(remove|purge)
if [ -d /usr/lib/#MULTIARCH#/gio/modules ]; then
# Purge the cache
rm -f /usr/lib/#MULTIARCH#/gio/modules/giomodule.cache
rmdir -p --ignore-fail-on-non-empty /usr/lib/#MULTIARCH#/gio/modules
fi
;;
esac
if [ "$1" = purge ] && [ -d /usr/share/glib-2.0/schemas ] && [ "$DPKG_MAINTSCRIPT_PACKAGE_REFCOUNT" = 1 ]; then
# This is the last multiarch variant to be removed, so drop the
# architecture-independent compiled schemas
rm -f /usr/share/glib-2.0/schemas/gschemas.compiled
rmdir -p --ignore-fail-on-non-empty /usr/share/glib-2.0/schemas
fi

4381
debian/libglib2.0-0.symbols vendored Normal file

File diff suppressed because it is too large Load diff

2
debian/libglib2.0-0.triggers.in vendored Normal file
View file

@ -0,0 +1,2 @@
interest-noawait /usr/lib/#MULTIARCH#/gio/modules
interest-await /usr/share/glib-2.0/schemas

13
debian/libglib2.0-bin.install vendored Normal file
View file

@ -0,0 +1,13 @@
usr/bin/gapplication
usr/bin/gdbus
usr/bin/gio
usr/bin/gresource
usr/bin/gsettings
usr/share/bash-completion
usr/share/man/man1/gapplication.1*
usr/share/man/man1/gdbus.1*
usr/share/man/man1/gio-querymodules.1*
usr/share/man/man1/gio.1*
usr/share/man/man1/glib-compile-schemas.1*
usr/share/man/man1/gresource.1*
usr/share/man/man1/gsettings.1*

2
debian/libglib2.0-bin.links vendored Normal file
View file

@ -0,0 +1,2 @@
/usr/lib/${DEB_HOST_MULTIARCH}/glib-2.0/gio-querymodules /usr/bin/gio-querymodules
/usr/lib/${DEB_HOST_MULTIARCH}/glib-2.0/glib-compile-schemas /usr/bin/glib-compile-schemas

View file

@ -0,0 +1,2 @@
# GLib programs normally use GLib functions instead of using libc directly
libglib2.0-bin: hardening-no-fortify-functions [usr/bin/gio]

1
debian/libglib2.0-data.install vendored Normal file
View file

@ -0,0 +1 @@
usr/share/locale

19
debian/libglib2.0-dev-bin.install vendored Normal file
View file

@ -0,0 +1,19 @@
usr/bin/gdbus-codegen
usr/bin/glib-compile-resources
usr/bin/glib-genmarshal
usr/bin/glib-gettextize
usr/bin/glib-mkenums
usr/bin/gobject-query
usr/bin/gtester
usr/bin/gtester-report
usr/share/aclocal
usr/share/glib-2.0/codegen/*.py
usr/share/glib-2.0/gettext
usr/share/man/man1/gdbus-codegen.1*
usr/share/man/man1/glib-compile-resources.1*
usr/share/man/man1/glib-genmarshal.1*
usr/share/man/man1/glib-gettextize.1*
usr/share/man/man1/glib-mkenums.1*
usr/share/man/man1/gobject-query.1*
usr/share/man/man1/gtester-report.1*
usr/share/man/man1/gtester.1*

15
debian/libglib2.0-dev.README.Debian vendored Normal file
View file

@ -0,0 +1,15 @@
GLib2.0 for Debian
-------------------
Static libraries issue:
Right now glib2.0 provides some static libraries. If your application
uses g_module* functions or other libraries uses g_module* functions and
your application link it, Please don't statically link this libraries.
You may get some strange proglem between static-linked application and
dynamic-loaded modules, g_module* provides the feature for dynamically
loading some modules.
This is well-known bug, so please don't file a bug report.
-- Akira TAGOH <tagoh@debian.org>, Thu, 11 Apr 2002 19:28:50 +0900

14
debian/libglib2.0-dev.install vendored Normal file
View file

@ -0,0 +1,14 @@
usr/include/*
usr/lib/*/glib-2.0
usr/lib/*/lib*.a
usr/lib/*/libgio*.so
usr/lib/*/libglib*.so
usr/lib/*/libgmodule*.so
usr/lib/*/libgobject*.so
usr/lib/*/libgthread*.so
usr/lib/*/pkgconfig
usr/share/gdb
usr/share/gettext/its
usr/share/glib-2.0/gdb
usr/share/glib-2.0/schemas
usr/share/glib-2.0/valgrind

14
debian/libglib2.0-doc.doc-base.gio vendored Normal file
View file

@ -0,0 +1,14 @@
Document: gio
Title: GIO (GLib) Reference Manual
Author: Damon Chaplin et al.
Abstract: GIO is striving to provide a modern, easy-to-use VFS API that sits at
the right level in the library stack. The goal is to overcome the shortcomings
of GnomeVFS and provide an API that is so good that developers prefer it over
raw POSIX calls. Among other things that means using GObject. It also means
not cloning the POSIX API, but providing higher-level, document-centric
interfaces.
Section: Programming/C
Format: HTML
Index: /usr/share/doc/libglib2.0-doc/gio/index.html
Files: /usr/share/doc/libglib2.0-doc/gio/*.html

12
debian/libglib2.0-doc.doc-base.glib vendored Normal file
View file

@ -0,0 +1,12 @@
Document: glib
Title: GLib Reference Manual
Author: Damon Chaplin et al.
Abstract: The GLib C library is used in GTK+ and GNOME
programs as a general-purpose set of functions for hash, tree, list,
and string operations, which C is oddly lacking whatsoever in any
of its standard libraries.
Section: Programming/C
Format: HTML
Index: /usr/share/doc/libglib2.0-doc/glib/index.html
Files: /usr/share/doc/libglib2.0-doc/glib/*.html

15
debian/libglib2.0-doc.doc-base.gobject vendored Normal file
View file

@ -0,0 +1,15 @@
Document: gobject
Title: GObject (GLib) Reference Manual
Author: Damon Chaplin et al.
Abstract: Most modern programming languages come with their own native object
systems and additional fundamental algorithmic language constructs.
Just as GLib serves as an implementation of such fundamental
types and algorithms (linked lists, hash tables and so forth), the
GLib Object System provides the required implementations of a
flexible extensible and intentionally easy to map (into other
languages) object oriented framework for C.
Section: Programming/C
Format: HTML
Index: /usr/share/doc/libglib2.0-doc/gobject/index.html
Files: /usr/share/doc/libglib2.0-doc/gobject/*.html

3
debian/libglib2.0-doc.install vendored Normal file
View file

@ -0,0 +1,3 @@
usr/share/gtk-doc/html/gio
usr/share/gtk-doc/html/glib
usr/share/gtk-doc/html/gobject

3
debian/libglib2.0-doc.links vendored Normal file
View file

@ -0,0 +1,3 @@
usr/share/gtk-doc/html/gio usr/share/doc/libglib2.0-doc/gio
usr/share/gtk-doc/html/glib usr/share/doc/libglib2.0-doc/glib
usr/share/gtk-doc/html/gobject usr/share/doc/libglib2.0-doc/gobject

View file

@ -0,0 +1,2 @@
# https://bugs.debian.org/970275
package-contains-documentation-outside-usr-share-doc usr/share/gtk-doc/html/*

6
debian/libglib2.0-doc.maintscript vendored Normal file
View file

@ -0,0 +1,6 @@
dir_to_symlink /usr/share/doc/libglib2.0-doc/gio ../../gtk-doc/html/gio 2.58.0-4~
dir_to_symlink /usr/share/doc/libglib2.0-doc/glib ../../gtk-doc/html/glib 2.58.0-4~
dir_to_symlink /usr/share/doc/libglib2.0-doc/gobject ../../gtk-doc/html/gobject 2.58.0-4~
symlink_to_dir /usr/share/gtk-doc/html/gio ../../doc/libglib2.0-doc/gio 2.58.0-4~
symlink_to_dir /usr/share/gtk-doc/html/glib ../../doc/libglib2.0-doc/glib 2.58.0-4~
symlink_to_dir /usr/share/gtk-doc/html/gobject ../../doc/libglib2.0-doc/gobject 2.58.0-4~

2
debian/libglib2.0-tests.install vendored Normal file
View file

@ -0,0 +1,2 @@
usr/libexec/installed-tests
usr/share/installed-tests

View file

@ -0,0 +1,12 @@
# Lots of tests don't use libc functions
libglib2.0-tests: hardening-no-fortify-functions [usr/libexec/installed-tests/glib/*]
# Some are deliberately not well-formed UTF-8
libglib2.0-tests: national-encoding usr/libexec/installed-tests/glib/markups/fail*
# Not every .txt file is documentation
libglib2.0-tests: package-contains-documentation-outside-usr-share-doc usr/libexec/installed-tests/glib/*.txt
# Test data for content-type sniffing, never actually executed
libglib2.0-tests: script-not-executable [usr/libexec/installed-tests/glib/x-content/unix-software/autorun.sh]
# This is lorem ipsum in a test-case, nothing to do with the Debian Free Software Guidelines
libglib2.0-tests: spelling-error-in-binary usr/libexec/installed-tests/glib/utf8-pointer dsfg dfsg
# Depends on a private test-only library
libglib2.0-tests: custom-library-search-path RUNPATH /usr/libexec/installed-tests/glib [usr/libexec/installed-tests/glib/gdbus-peer]

2
debian/libglib2.0-udeb.install vendored Normal file
View file

@ -0,0 +1,2 @@
usr/lib/*/lib*.so.*
usr/share/locale

View file

@ -0,0 +1,2 @@
# It's a deliberate choice of bundling them together
libglib2.0-udeb udeb: package-name-doesnt-match-sonames libgio-2.0-0 libglib-2.0-0 libgmodule-2.0-0 libgobject-2.0-0 libgthread-2.0-0

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,38 @@
From: Ryan Lortie <desrt@desrt.ca>
Date: Tue, 4 Mar 2014 09:20:38 -0500
Subject: timer test: use 'volatile' for locals
GCC seems to be failing to follow the letter of the C spec by allowing extra
precision in floating point values to persist across assignments which are
optimised away.
Force its hand by using 'volatile' on the locals in question.
Bug: https://gitlab.gnome.org/GNOME/glib/issues/820
Forwarded: yes
---
glib/tests/timer.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/glib/tests/timer.c b/glib/tests/timer.c
index 102406e..8ea5c1f 100644
--- a/glib/tests/timer.c
+++ b/glib/tests/timer.c
@@ -30,7 +30,7 @@ static void
test_timer_basic (void)
{
GTimer *timer;
- gdouble elapsed;
+ volatile gdouble elapsed;
gulong micros;
timer = g_timer_new ();
@@ -65,7 +65,7 @@ static void
test_timer_stop (void)
{
GTimer *timer;
- gdouble elapsed, elapsed2;
+ volatile gdouble elapsed, elapsed2;
timer = g_timer_new ();

View file

@ -0,0 +1,167 @@
From: Philip Withnall <withnall@endlessm.com>
Date: Thu, 23 Nov 2017 18:48:58 +0000
Subject: Call gettext if .desktop file does not have inline translations
Patch from OpenSUSE via Ubuntu, original author unknown. Martin Pitt and
Vincent Untz appear to be the main authors.
Reworked slightly by Philip Withnall to avoid exposing new public API
for the non-standard keys.
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=569829
Bug-Ubuntu: https://launchpad.net/bugs/3935
Applied-upstream: no, rejected because "this will be solved soon" (in 2013)
---
glib/gkeyfile.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 83 insertions(+)
diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c
index 6460970..762dfef 100644
--- a/glib/gkeyfile.c
+++ b/glib/gkeyfile.c
@@ -489,6 +489,17 @@
* Since: 2.14
*/
+/* Downstream Debian defines for calling gettext() if a .desktop file doesnt
+ * contain translations. These are not standardised.
+ *
+ * See: https://launchpad.net/bugs/3935
+ * See:http://bugzilla.gnome.org/show_bug.cgi?id=569829
+ */
+#define G_KEY_FILE_DESKTOP_ACTION_GROUP_PREFIX "Desktop Action"
+#define G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN "X-GNOME-Gettext-Domain"
+#define G_KEY_FILE_DESKTOP_KEY_FULLNAME "X-GNOME-FullName"
+#define G_KEY_FILE_DESKTOP_KEY_KEYWORDS "Keywords"
+
typedef struct _GKeyFileGroup GKeyFileGroup;
/**
@@ -513,6 +524,7 @@ struct _GKeyFile
gboolean checked_locales; /* TRUE if @locales has been initialised */
gchar **locales; /* (nullable) */
+ gchar *gettext_domain;
gint ref_count; /* (atomic) */
};
@@ -639,6 +651,7 @@ g_key_file_init (GKeyFile *key_file)
key_file->parse_buffer = NULL;
key_file->list_separator = ';';
key_file->flags = 0;
+ key_file->gettext_domain = NULL;
}
static void
@@ -659,6 +672,12 @@ g_key_file_clear (GKeyFile *key_file)
key_file->parse_buffer = NULL;
}
+ if (key_file->gettext_domain)
+ {
+ g_free (key_file->gettext_domain);
+ key_file->gettext_domain = NULL;
+ }
+
tmp = key_file->groups;
while (tmp != NULL)
{
@@ -879,6 +898,11 @@ g_key_file_load_from_fd (GKeyFile *key_file,
return FALSE;
}
+ key_file->gettext_domain = g_key_file_get_string (key_file,
+ G_KEY_FILE_DESKTOP_GROUP,
+ G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN,
+ NULL);
+
return TRUE;
}
@@ -991,6 +1015,11 @@ g_key_file_load_from_data (GKeyFile *key_file,
return FALSE;
}
+ key_file->gettext_domain = g_key_file_get_string (key_file,
+ G_KEY_FILE_DESKTOP_GROUP,
+ G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN,
+ NULL);
+
return TRUE;
}
@@ -2240,6 +2269,8 @@ g_key_file_get_locale_string (GKeyFile *key_file,
GError *key_file_error;
gchar **languages;
gboolean free_languages = FALSE;
+ gboolean try_gettext = FALSE;
+ const gchar *msg_locale;
gint i;
g_return_val_if_fail (key_file != NULL, NULL);
@@ -2261,6 +2292,25 @@ g_key_file_get_locale_string (GKeyFile *key_file,
free_languages = FALSE;
}
+ /* we're only interested in gettext translation if we don't have a
+ * translation in the .desktop file itself and if the key is one of the keys
+ * we know we want to translate: Name, GenericName, Comment, Keywords.
+ * Blindly doing this for all keys can give strange result for the icons,
+ * since the Icon is a locale string in the spec, eg. We also only get
+ * translation in the mo file if the requested locale is the LC_MESSAGES one.
+ * Ideally, we should do more and change LC_MESSAGES to use the requested
+ * locale, but there's no guarantee it's installed on the system and it might
+ * have some side-effects. Since this is a corner case, let's ignore it. */
+ msg_locale = setlocale (LC_MESSAGES, NULL);
+ try_gettext = msg_locale && key_file->gettext_domain &&
+ (strcmp (group_name, G_KEY_FILE_DESKTOP_GROUP) == 0 ||
+ g_str_has_prefix (group_name, G_KEY_FILE_DESKTOP_ACTION_GROUP_PREFIX)) &&
+ (strcmp (key, G_KEY_FILE_DESKTOP_KEY_NAME) == 0 ||
+ strcmp (key, G_KEY_FILE_DESKTOP_KEY_FULLNAME) == 0 ||
+ strcmp (key, G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME) == 0 ||
+ strcmp (key, G_KEY_FILE_DESKTOP_KEY_KEYWORDS) == 0 ||
+ strcmp (key, G_KEY_FILE_DESKTOP_KEY_COMMENT) == 0);
+
for (i = 0; languages[i]; i++)
{
candidate_key = g_strdup_printf ("%s[%s]", key, languages[i]);
@@ -2274,6 +2324,39 @@ g_key_file_get_locale_string (GKeyFile *key_file,
break;
}
+ /* Fallback to gettext */
+ if (try_gettext && !translated_value)
+ {
+ gchar *orig_value = g_key_file_get_string (key_file, group_name, key, NULL);
+
+ if (orig_value)
+ {
+ gboolean codeset_set;
+ const gchar *translated;
+ gboolean has_gettext;
+
+ codeset_set = bind_textdomain_codeset (key_file->gettext_domain, "UTF-8") != NULL;
+ translated = NULL;
+
+ translated = g_dgettext (key_file->gettext_domain,
+ orig_value);
+ has_gettext = translated != orig_value;
+
+ g_free (orig_value);
+
+ if (has_gettext)
+ {
+ if (codeset_set)
+ translated_value = g_strdup (translated);
+ else
+ translated_value = g_locale_to_utf8 (translated,
+ -1, NULL, NULL, NULL);
+ }
+ else
+ translated_value = NULL;
+ }
+ }
+
/* Fallback to untranslated key
*/
if (!translated_value)

View file

@ -0,0 +1,51 @@
From: Martin Pitt <mpitt@debian.org>
Date: Tue, 24 Feb 2009 16:08:05 +0100
Subject: Provide backwards compatibility for 01_gettext-desktopfiles.patch
for X-{Debian,Ubuntu}-Gettext-Domain
Ubuntu-specific. 01_gettext-desktopfiles.patch was changed to use
X-GNOME-, so this is necessary until all our .desktop files are converted.
Forwarded: no
---
glib/gkeyfile.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c
index 762dfef..6b9f45b 100644
--- a/glib/gkeyfile.c
+++ b/glib/gkeyfile.c
@@ -902,6 +902,16 @@ g_key_file_load_from_fd (GKeyFile *key_file,
G_KEY_FILE_DESKTOP_GROUP,
G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN,
NULL);
+ if (!key_file->gettext_domain)
+ key_file->gettext_domain = g_key_file_get_string (key_file,
+ G_KEY_FILE_DESKTOP_GROUP,
+ "X-Ubuntu-Gettext-Domain",
+ NULL);
+ if (!key_file->gettext_domain)
+ key_file->gettext_domain = g_key_file_get_string (key_file,
+ G_KEY_FILE_DESKTOP_GROUP,
+ "X-Debian-Gettext-Domain",
+ NULL);
return TRUE;
}
@@ -1019,6 +1029,16 @@ g_key_file_load_from_data (GKeyFile *key_file,
G_KEY_FILE_DESKTOP_GROUP,
G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN,
NULL);
+ if (!key_file->gettext_domain)
+ key_file->gettext_domain = g_key_file_get_string (key_file,
+ G_KEY_FILE_DESKTOP_GROUP,
+ "X-Ubuntu-Gettext-Domain",
+ NULL);
+ if (!key_file->gettext_domain)
+ key_file->gettext_domain = g_key_file_get_string (key_file,
+ G_KEY_FILE_DESKTOP_GROUP,
+ "X-Debian-Gettext-Domain",
+ NULL);
return TRUE;
}

View file

@ -0,0 +1,36 @@
From: Iain Lane <iain.lane@canonical.com>
Date: Mon, 10 Sep 2012 16:25:18 +0100
Subject: Disable confusing (to users) warning about deprecated schema paths
Disable a warning when compiling schemas which are installed
into 'deprecated' locations. Users see this very often due to
glib-compile-schemas being called from libglib2.0-0's trigger and it is
not very useful for them.
Forwarded: not-needed
---
gio/glib-compile-schemas.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c
index 7e1152f..57f6b96 100644
--- a/gio/glib-compile-schemas.c
+++ b/gio/glib-compile-schemas.c
@@ -1232,6 +1232,9 @@ parse_state_start_schema (ParseState *state,
return;
}
+ // Disable this warning: it confuses users and there is unlikely to be much
+ // progress towards fixing
+ /*
if (path && (g_str_has_prefix (path, "/apps/") ||
g_str_has_prefix (path, "/desktop/") ||
g_str_has_prefix (path, "/system/")))
@@ -1244,6 +1247,7 @@ parse_state_start_schema (ParseState *state,
g_printerr ("%s\n", message);
g_free (message);
}
+ */
state->schema_state = schema_state_new (path, gettext_domain,
extends, extends_name, list_of);

View file

@ -0,0 +1,33 @@
From: Martin Pitt <martin.pitt@ubuntu.com>
Date: Tue, 26 Jun 2012 19:28:14 +0200
Subject: Do not fail the /thread/thread4 test if prlimit() fails
This happens on the Debian buildds.
[smcv: Use g_test_skip()]
Forwarded: no, Debian buildd specific
---
glib/tests/thread.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/glib/tests/thread.c b/glib/tests/thread.c
index 2bae96c..d2a91bf 100644
--- a/glib/tests/thread.c
+++ b/glib/tests/thread.c
@@ -146,7 +146,14 @@ test_thread4 (void)
nl.rlim_cur = 1;
if ((ret = prlimit (getpid (), RLIMIT_NPROC, &nl, &ol)) != 0)
- g_error ("prlimit failed: %s", g_strerror (errno));
+ {
+ gchar *message = g_strdup_printf ("setting PRLIMIT_NPROC to {cur=%d,max=%d} failed: %s",
+ (int) nl.rlim_cur, (int) nl.rlim_max,
+ g_strerror (errno));
+ g_test_skip (message);
+ g_free (message);
+ return;
+ }
error = NULL;
thread = g_thread_try_new ("a", thread1_func, NULL, &error);

View file

@ -0,0 +1,70 @@
From: Simon McVittie <smcv@debian.org>
Date: Sun, 24 Oct 2021 22:40:11 +0100
Subject: Add extra debug to memory-monitor-dbus test
Hopefully this will give us the necessary information to find out why
this test isn't reliable.
Bug-Debian: https://bugs.debian.org/995178
Forwarded: no
---
gio/tests/memory-monitor-dbus.py.in | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/gio/tests/memory-monitor-dbus.py.in b/gio/tests/memory-monitor-dbus.py.in
index 17862e3..61e6f94 100755
--- a/gio/tests/memory-monitor-dbus.py.in
+++ b/gio/tests/memory-monitor-dbus.py.in
@@ -74,18 +74,29 @@ try:
Timeout is in deciseconds, defaulting to 50 (5 seconds). message is
printed on failure.
'''
+ print('Waiting up to {}/10 seconds for {!r} to be true'.format(timeout, condition))
+ orig_timeout = timeout
+
while timeout >= 0:
+ print('Loop iteration')
context = GLib.MainContext.default()
while context.iteration(False):
+ print('Iterating main loop')
pass
if condition():
+ print('Condition reached')
break
timeout -= 1
time.sleep(0.1)
else:
+ print('Condition not reached in {}/10 seconds'.format(orig_timeout))
self.fail(message or 'timed out waiting for ' + str(condition))
def memory_warning_cb(self, monitor, level):
+ print('low-memory-warning: monitor {!r} reports level {}'.format(
+ monitor,
+ level,
+ ))
self.last_warning = level
self.main_context.wakeup()
@@ -95,17 +106,20 @@ try:
# Wait 2 seconds
timeout = 2
while timeout > 0:
+ print('Waiting 0.5s for stray events...')
time.sleep(0.5)
timeout -= 0.5
self.main_context.iteration(False)
+ print('Emitting mock low-memory warning, level 100: try to free memory')
self.dbusmock.EmitWarning(100)
# Wait 2 seconds or until warning
- self.assertEventually(lambda: self.last_warning == 100, "'100' low-memory warning not received", 20)
+ self.assertEventually(lambda: self.last_warning == 100, "'100' low-memory warning not received", 100)
+ print('Emitting mock low-memory warning, level 255: OOM imminent')
self.dbusmock.EmitWarning(255)
# Wait 2 seconds or until warning
- self.assertEventually(lambda: self.last_warning == 255, "'255' low-memory warning not received", 20)
+ self.assertEventually(lambda: self.last_warning == 255, "'255' low-memory warning not received", 100)
except ImportError as e:
@unittest.skip("Cannot import %s" % e.name)

View file

@ -0,0 +1,70 @@
From: Martin Pitt <martin.pitt@ubuntu.com>
Date: Thu, 27 Sep 2012 11:22:56 +0200
Subject: Disable some tests on slow architectures which keep failing the
tests
[smcv: Modified to use g_test_skip() instead of omitting those test cases
completely, and allow them to be re-enabled with a Debian-specific
environment variable]
Co-authored-by: Simon McVittie <smcv@debian.org>
Forwarded: no
---
glib/tests/mainloop.c | 16 ++++++++++++++++
glib/tests/timeout.c | 9 +++++++++
2 files changed, 25 insertions(+)
diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c
index 2bbb3d8..d6220a6 100644
--- a/glib/tests/mainloop.c
+++ b/glib/tests/mainloop.c
@@ -520,6 +520,14 @@ test_child_sources (void)
GMainLoop *loop;
GSource *parent, *child_b, *child_c, *end;
+#if defined(__arm__)
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("Not reliable on older ARM hardware");
+ return;
+ }
+#endif
+
ctx = g_main_context_new ();
loop = g_main_loop_new (ctx, FALSE);
@@ -598,6 +606,14 @@ test_recursive_child_sources (void)
GMainLoop *loop;
GSource *parent, *child_b, *child_c, *end;
+#if defined(__arm__)
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("Not reliable on older ARM hardware");
+ return;
+ }
+#endif
+
ctx = g_main_context_new ();
loop = g_main_loop_new (ctx, FALSE);
diff --git a/glib/tests/timeout.c b/glib/tests/timeout.c
index 9e4d047..1ab8845 100644
--- a/glib/tests/timeout.c
+++ b/glib/tests/timeout.c
@@ -179,6 +179,15 @@ test_func (gpointer data)
static void
test_rounding (void)
{
+
+#if defined(__arm__)
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("Not reliable on older ARM hardware");
+ return;
+ }
+#endif
+
loop = g_main_loop_new (NULL, FALSE);
last_time = g_get_monotonic_time ();

View file

@ -0,0 +1,25 @@
From: Simon McVittie <smcv@debian.org>
Date: Sun, 24 Oct 2021 22:38:20 +0100
Subject: Skip memory-monitor-dbus test if not specifically requested
This seems to be unreliable, particularly on non-x86.
Bug-Debian: https://bugs.debian.org/995178
Forwarded: no
---
gio/tests/memory-monitor-dbus.py.in | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gio/tests/memory-monitor-dbus.py.in b/gio/tests/memory-monitor-dbus.py.in
index bf32918..17862e3 100755
--- a/gio/tests/memory-monitor-dbus.py.in
+++ b/gio/tests/memory-monitor-dbus.py.in
@@ -39,6 +39,8 @@ try:
klass.start_system_bus()
klass.dbus_con = klass.get_dbus(True)
+ @unittest.skipIf('DEB_ALLOW_FLAKY_TESTS' not in os.environ,
+ 'https://bugs.debian.org/995178')
def setUp(self):
try:
Gio.MemoryMonitor

View file

@ -0,0 +1,32 @@
From: Iain Lane <laney@debian.org>
Date: Tue, 18 Mar 2014 15:43:35 +0000
Subject: Skip test which performs some unreliable floating point comparisons
[smcv: Modified to use g_test_skip() instead of omitting those test cases
completely, and allow them to be re-enabled with a Debian-specific
environment variable]
Co-authored-by: Simon McVittie <smcv@debian.org>
Bug: https://gitlab.gnome.org/GNOME/glib/issues/820
Forwarded: no
---
glib/tests/timer.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/glib/tests/timer.c b/glib/tests/timer.c
index 8ea5c1f..a4c1095 100644
--- a/glib/tests/timer.c
+++ b/glib/tests/timer.c
@@ -33,6 +33,12 @@ test_timer_basic (void)
volatile gdouble elapsed;
gulong micros;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("Not reliable due to floating-point rounding (glib#820)");
+ return;
+ }
+
timer = g_timer_new ();
g_timer_start (timer);

View file

@ -0,0 +1,48 @@
From: Simon McVittie <smcv@debian.org>
Date: Fri, 4 Jan 2019 08:37:20 +0000
Subject: Skip unreliable gdbus-threading tests by default
test_threaded_singleton() test to reproduce a race condition between
last-unref of the global singleton GDBusConnection and g_bus_get_sync().
test_method_calls_in_thread() checks that multiple threads can all make
method calls to the same proxy.
However, test setup intermittently times out with:
# GLib-GIO-DEBUG: run 0: refcount is 2, sleeping
Bail out! GLib-GIO-FATAL-ERROR: connection had too many refs
The current theory upstream is that this might be a reference leak in
test_delivery_in_thread().
Furthermore, test teardown is now often failing when destroying the test
bus.
Demote these tests to be run as part of the "flaky" autopkgtests, but
not at build time or in the part of the autopkgtest run that gates
progress into testing.
Bug: https://gitlab.gnome.org/GNOME/glib/issues/1515
Forwarded: no
---
gio/tests/gdbus-threading.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/gio/tests/gdbus-threading.c b/gio/tests/gdbus-threading.c
index 9f3abc4..ec8867e 100644
--- a/gio/tests/gdbus-threading.c
+++ b/gio/tests/gdbus-threading.c
@@ -649,6 +649,12 @@ main (int argc,
g_test_init (&argc, &argv, NULL);
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_print("ok 1 # SKIP all gdbus-threading tests skipped because they are too unreliable (glib#1515)\n");
+ return 77;
+ }
+
session_bus_up ();
/* this is safe; testserver will exit once the bus goes away */

View file

@ -0,0 +1,37 @@
From: Simon McVittie <smcv@debian.org>
Date: Thu, 3 Jan 2019 09:01:03 +0000
Subject: closures test: Skip on arm* unless flaky tests are allowed
Choosing the right number of iterations to avoid either taking literally
hours on some hardware, or getting spurious failures when one thread
starves another, seems to be too hard to get right in practice.
Make this test opt-in so that its failures aren't release-critical.
We can run it as a separate autopkgtest that is marked flaky.
Signed-off-by: Simon McVittie <smcv@debian.org>
Bug-Debian: https://bugs.debian.org/880883
Bug-Debian: https://bugs.debian.org/917983
Forwarded: not-needed
---
gobject/tests/closure-refcount.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/gobject/tests/closure-refcount.c b/gobject/tests/closure-refcount.c
index 5a92005..73185f0 100644
--- a/gobject/tests/closure-refcount.c
+++ b/gobject/tests/closure-refcount.c
@@ -260,6 +260,14 @@ test_closure_refcount (void)
GTest *object;
guint i, n_iterations;
+#if defined(__aarch64__) || defined(__arm__)
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") != NULL)
+ {
+ g_print ("SKIP: Test is known to be flaky on arm* (#880883, #917983)\n");
+ return 0;
+ }
+#endif
+
object = g_object_new (G_TYPE_TEST, NULL);
closure = g_cclosure_new (G_CALLBACK (test_signal_handler), &test_data, destroy_data);

View file

@ -0,0 +1,35 @@
From: Simon McVittie <smcv@debian.org>
Date: Thu, 19 Nov 2020 10:44:39 +0000
Subject: gdbus-server-auth: Normally skip flaky DBUS_COOKIE_SHA1 tests
These intermittently fail on the buildds, but the failure cannot be
reproduced in a debugging environment.
We do not expect to use D-Bus over TCP on non-Windows platforms: we use
an AF_UNIX socket, which is much more robust and secure. However, when
using AF_UNIX, DBUS_COOKIE_SHA1 is unnecessary, because we can use the
more reliable EXTERNAL authentication.
Forwarded: not-needed
---
gio/tests/gdbus-server-auth.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/gio/tests/gdbus-server-auth.c b/gio/tests/gdbus-server-auth.c
index bd1443e..a231b0c 100644
--- a/gio/tests/gdbus-server-auth.c
+++ b/gio/tests/gdbus-server-auth.c
@@ -324,6 +324,13 @@ do_test_server_auth (InteropFlags flags)
}
#endif
+ if ((flags & (INTEROP_FLAGS_TCP | INTEROP_FLAGS_SHA1)) &&
+ g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/glib/-/issues/2206");
+ goto out;
+ }
+
if (flags & INTEROP_FLAGS_ANONYMOUS)
server_flags |= G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS;
if (flags & INTEROP_FLAGS_REQUIRE_SAME_USER)

View file

@ -0,0 +1,29 @@
From: Jeremy Bicha <jeremy.bicha@canonical.com>
Date: Wed, 23 Mar 2022 14:40:16 -0400
Subject: gdesktopappinfo: Recognize gnome-console as a terminal app
GNOME Console (installed as /usr/bin/kgx ) is the default
GNOME terminal app as of GNOME 42
Related to: https://gitlab.gnome.org/GNOME/glib/-/issues/338
But see https://gitlab.freedesktop.org/xdg/xdg-specs/-/merge_requests/46
for a more comprehensive way of handling issues around the default
terminal app
---
gio/gdesktopappinfo.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c
index 60d6deb..4a0b019 100644
--- a/gio/gdesktopappinfo.c
+++ b/gio/gdesktopappinfo.c
@@ -2672,6 +2672,8 @@ prepend_terminal_to_vector (int *argc,
}
else
{
+ if (check == NULL)
+ check = g_find_program_in_path ("kgx");
if (check == NULL)
check = g_find_program_in_path ("tilix");
if (check == NULL)

View file

@ -0,0 +1,30 @@
From: Simon McVittie <smcv@debian.org>
Date: Fri, 26 Jul 2019 23:49:03 +0100
Subject: gmenumodel test: Mark as flaky
This test has not had a great history of reliability.
Signed-off-by: Simon McVittie <smcv@debian.org>
Bug-Debian: https://bugs.debian.org/932678
Forwarded: no
---
gio/tests/gmenumodel.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/gio/tests/gmenumodel.c b/gio/tests/gmenumodel.c
index 492daf8..ed8828d 100644
--- a/gio/tests/gmenumodel.c
+++ b/gio/tests/gmenumodel.c
@@ -1160,6 +1160,12 @@ test_dbus_peer_subscriptions (void)
#else
PeerConnection peer;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("Not reliable? #932678");
+ return;
+ }
+
peer_connection_up (&peer);
do_subscriptions (peer.server_connection, peer.client_connection);
peer_connection_down (&peer);

View file

@ -0,0 +1,36 @@
From: Simon McVittie <smcv@debian.org>
Date: Fri, 26 Jul 2019 23:51:39 +0100
Subject: gvariant test: Don't run at build-time on mips
DEB_ALLOW_FLAKY_TESTS is not quite right here, because we don't know
that the test would fail if left for long enough - the problem is that
it doesn't get there, because generating random floating-point numbers
is very slow on some of our mips hardware. However, it has the right
practical effect.
Signed-off-by: Simon McVittie <smcv@debian.org>
Bug: https://bugs.debian.org/932678
Forwarded: no
---
glib/tests/gvariant.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/glib/tests/gvariant.c b/glib/tests/gvariant.c
index 0110f26..1f30d23 100644
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -2401,6 +2401,14 @@ test_fuzzes (gpointer data)
gdouble fuzziness;
int i;
+#ifdef __mips__
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("Extremely slow on some mips CPUs: #932678");
+ return;
+ }
+#endif
+
fuzziness = GPOINTER_TO_INT (data) / 100.;
for (i = 0; i < 200; i++)

View file

@ -0,0 +1,117 @@
From: Simon McVittie <smcv@debian.org>
Date: Tue, 25 Feb 2020 10:45:07 +0000
Subject: testfilemonitor: Skip if we are avoiding flaky tests
See https://gitlab.gnome.org/GNOME/glib/issues/1634
Signed-off-by: Simon McVittie <smcv@debian.org>
Forwarded: no
---
gio/tests/testfilemonitor.c | 38 +++++++++++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/gio/tests/testfilemonitor.c b/gio/tests/testfilemonitor.c
index 082f0db..7e7db90 100644
--- a/gio/tests/testfilemonitor.c
+++ b/gio/tests/testfilemonitor.c
@@ -32,6 +32,12 @@ setup (Fixture *fixture,
gchar *path = NULL;
GError *local_error = NULL;
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/glib/issues/1634");
+ return;
+ }
+
path = g_dir_make_tmp ("gio-test-testfilemonitor_XXXXXX", &local_error);
g_assert_no_error (local_error);
@@ -48,7 +54,9 @@ teardown (Fixture *fixture,
{
GError *local_error = NULL;
- g_file_delete (fixture->tmp_dir, NULL, &local_error);
+ if (fixture->tmp_dir != NULL)
+ g_file_delete (fixture->tmp_dir, NULL, &local_error);
+
g_assert_no_error (local_error);
g_clear_object (&fixture->tmp_dir);
}
@@ -375,6 +383,10 @@ test_atomic_replace (Fixture *fixture,
if (skip_win32 ())
return;
+ /* respect g_test_skip() during setup() */
+ if (g_test_failed ())
+ return;
+
data.step = 0;
data.events = NULL;
@@ -483,6 +495,10 @@ test_file_changes (Fixture *fixture,
if (skip_win32 ())
return;
+ /* respect g_test_skip() during setup() */
+ if (g_test_failed ())
+ return;
+
data.step = 0;
data.events = NULL;
@@ -603,6 +619,10 @@ test_dir_monitor (Fixture *fixture,
if (skip_win32 ())
return;
+ /* respect g_test_skip() during setup() */
+ if (g_test_failed ())
+ return;
+
data.step = 0;
data.events = NULL;
@@ -703,6 +723,10 @@ test_dir_non_existent (Fixture *fixture,
if (skip_win32 ())
return;
+ /* respect g_test_skip() during setup() */
+ if (g_test_failed ())
+ return;
+
data.step = 0;
data.events = NULL;
@@ -815,6 +839,10 @@ test_cross_dir_moves (Fixture *fixture,
if (skip_win32 ())
return;
+ /* respect g_test_skip() during setup() */
+ if (g_test_failed ())
+ return;
+
data[0].step = 0;
data[0].events = NULL;
@@ -984,6 +1012,10 @@ test_file_hard_links (Fixture *fixture,
GError *error = NULL;
TestData data;
+ /* respect g_test_skip() during setup() */
+ if (g_test_failed ())
+ return;
+
g_test_bug ("https://bugzilla.gnome.org/show_bug.cgi?id=755721");
if (skip_win32 ())
@@ -1043,6 +1075,10 @@ test_finalize_in_callback (Fixture *fixture,
GFile *file = NULL;
guint i;
+ /* respect g_test_skip() during setup() */
+ if (g_test_failed ())
+ return;
+
g_test_summary ("Test that finalization of a GFileMonitor in one of its "
"callbacks doesnt cause a deadlock.");
g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/1941");

View file

@ -0,0 +1,28 @@
From: Simon McVittie <smcv@debian.org>
Date: Tue, 15 Feb 2022 20:42:53 +0000
Subject: tests: Skip debugcontroller test
This is known to be flaky upstream.
Forwarded: not-needed
---
gio/tests/debugcontroller.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/gio/tests/debugcontroller.c b/gio/tests/debugcontroller.c
index c20acd6..9c7216e 100644
--- a/gio/tests/debugcontroller.c
+++ b/gio/tests/debugcontroller.c
@@ -189,6 +189,12 @@ test_dbus_properties (void)
g_test_summary ("Test getting and setting properties on a #GDebugControllerDBus.");
+ if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+ {
+ g_test_skip ("https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2486#note_1384102");
+ return;
+ }
+
/* Set up a test session bus and connection. Set up a separate second
* connection to simulate a remote peer. */
bus = g_test_dbus_new (G_TEST_DBUS_NONE);

View file

@ -0,0 +1,94 @@
From 590f7a6b76b5a3695aa562c9c3ab244433b6624b Mon Sep 17 00:00:00 2001
From: William Manley <will@stb-tester.com>
Date: Tue, 23 Jun 2020 22:59:58 +0100
Subject: [PATCH 01/18] gvariant-core: Consolidate construction of
`GVariantSerialised`
So I only need to change it in one place.
This introduces no functional changes.
Helps: #2121
---
glib/gvariant-core.c | 49 ++++++++++++++++++++++----------------------
1 file changed, 25 insertions(+), 24 deletions(-)
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -350,6 +350,27 @@ g_variant_ensure_size (GVariant *value)
}
/* < private >
+ * g_variant_to_serialised:
+ * @value: a #GVariant
+ *
+ * Gets a GVariantSerialised for a GVariant in state STATE_SERIALISED.
+ */
+inline static GVariantSerialised
+g_variant_to_serialised (GVariant *value)
+{
+ g_assert (value->state & STATE_SERIALISED);
+ {
+ GVariantSerialised serialised = {
+ value->type_info,
+ (gpointer) value->contents.serialised.data,
+ value->size,
+ value->depth,
+ };
+ return serialised;
+ }
+}
+
+/* < private >
* g_variant_serialise:
* @value: a #GVariant
* @data: an appropriately-sized buffer
@@ -1007,16 +1028,8 @@ g_variant_n_children (GVariant *value)
g_variant_lock (value);
if (value->state & STATE_SERIALISED)
- {
- GVariantSerialised serialised = {
- value->type_info,
- (gpointer) value->contents.serialised.data,
- value->size,
- value->depth,
- };
-
- n_children = g_variant_serialised_n_children (serialised);
- }
+ n_children = g_variant_serialised_n_children (
+ g_variant_to_serialised (value));
else
n_children = value->contents.tree.n_children;
@@ -1083,12 +1096,7 @@ g_variant_get_child_value (GVariant *val
}
{
- GVariantSerialised serialised = {
- value->type_info,
- (gpointer) value->contents.serialised.data,
- value->size,
- value->depth,
- };
+ GVariantSerialised serialised = g_variant_to_serialised (value);
GVariantSerialised s_child;
GVariant *child;
@@ -1201,14 +1209,7 @@ g_variant_is_normal_form (GVariant *valu
if (value->state & STATE_SERIALISED)
{
- GVariantSerialised serialised = {
- value->type_info,
- (gpointer) value->contents.serialised.data,
- value->size,
- value->depth
- };
-
- if (g_variant_serialised_is_normal (serialised))
+ if (g_variant_serialised_is_normal (g_variant_to_serialised (value)))
value->state |= STATE_TRUSTED;
}
else

View file

@ -0,0 +1,201 @@
From f8f5d8eefa06008aa8fe684069193dc3b1ae1b58 Mon Sep 17 00:00:00 2001
From: William Manley <will@stb-tester.com>
Date: Thu, 25 Jun 2020 17:08:21 +0100
Subject: [PATCH 02/18] gvariant-serialiser: Factor out functions for dealing
with framing offsets
This introduces no functional changes.
Helps: #2121
---
glib/gvariant-serialiser.c | 108 +++++++++++++++++++------------------
1 file changed, 57 insertions(+), 51 deletions(-)
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -633,30 +633,62 @@ gvs_calculate_total_size (gsize body_siz
return body_size + 8 * offsets;
}
+struct Offsets
+{
+ gsize data_size;
+
+ guchar *array;
+ gsize length;
+ guint offset_size;
+
+ gboolean is_normal;
+};
+
static gsize
-gvs_variable_sized_array_n_children (GVariantSerialised value)
+gvs_offsets_get_offset_n (struct Offsets *offsets,
+ gsize n)
{
+ return gvs_read_unaligned_le (
+ offsets->array + (offsets->offset_size * n), offsets->offset_size);
+}
+
+static struct Offsets
+gvs_variable_sized_array_get_frame_offsets (GVariantSerialised value)
+{
+ struct Offsets out = { 0, };
gsize offsets_array_size;
- gsize offset_size;
gsize last_end;
if (value.size == 0)
- return 0;
-
- offset_size = gvs_get_offset_size (value.size);
+ {
+ out.is_normal = TRUE;
+ return out;
+ }
- last_end = gvs_read_unaligned_le (value.data + value.size -
- offset_size, offset_size);
+ out.offset_size = gvs_get_offset_size (value.size);
+ last_end = gvs_read_unaligned_le (value.data + value.size - out.offset_size,
+ out.offset_size);
if (last_end > value.size)
- return 0;
+ return out; /* offsets not normal */
offsets_array_size = value.size - last_end;
- if (offsets_array_size % offset_size)
- return 0;
+ if (offsets_array_size % out.offset_size)
+ return out; /* offsets not normal */
- return offsets_array_size / offset_size;
+ out.data_size = last_end;
+ out.array = value.data + last_end;
+ out.length = offsets_array_size / out.offset_size;
+ out.is_normal = TRUE;
+
+ return out;
+}
+
+static gsize
+gvs_variable_sized_array_n_children (GVariantSerialised value)
+{
+ return gvs_variable_sized_array_get_frame_offsets (value).length;
}
static GVariantSerialised
@@ -664,8 +696,9 @@ gvs_variable_sized_array_get_child (GVar
gsize index_)
{
GVariantSerialised child = { 0, };
- gsize offset_size;
- gsize last_end;
+
+ struct Offsets offsets = gvs_variable_sized_array_get_frame_offsets (value);
+
gsize start;
gsize end;
@@ -673,18 +706,11 @@ gvs_variable_sized_array_get_child (GVar
g_variant_type_info_ref (child.type_info);
child.depth = value.depth + 1;
- offset_size = gvs_get_offset_size (value.size);
-
- last_end = gvs_read_unaligned_le (value.data + value.size -
- offset_size, offset_size);
-
if (index_ > 0)
{
guint alignment;
- start = gvs_read_unaligned_le (value.data + last_end +
- (offset_size * (index_ - 1)),
- offset_size);
+ start = gvs_offsets_get_offset_n (&offsets, index_ - 1);
g_variant_type_info_query (child.type_info, &alignment, NULL);
start += (-start) & alignment;
@@ -692,11 +718,9 @@ gvs_variable_sized_array_get_child (GVar
else
start = 0;
- end = gvs_read_unaligned_le (value.data + last_end +
- (offset_size * index_),
- offset_size);
+ end = gvs_offsets_get_offset_n (&offsets, index_);
- if (start < end && end <= value.size && end <= last_end)
+ if (start < end && end <= value.size && end <= offsets.data_size)
{
child.data = value.data + start;
child.size = end - start;
@@ -768,34 +792,16 @@ static gboolean
gvs_variable_sized_array_is_normal (GVariantSerialised value)
{
GVariantSerialised child = { 0, };
- gsize offsets_array_size;
- guchar *offsets_array;
- guint offset_size;
guint alignment;
- gsize last_end;
- gsize length;
gsize offset;
gsize i;
- if (value.size == 0)
- return TRUE;
-
- offset_size = gvs_get_offset_size (value.size);
- last_end = gvs_read_unaligned_le (value.data + value.size -
- offset_size, offset_size);
+ struct Offsets offsets = gvs_variable_sized_array_get_frame_offsets (value);
- if (last_end > value.size)
+ if (!offsets.is_normal)
return FALSE;
- offsets_array_size = value.size - last_end;
-
- if (offsets_array_size % offset_size)
- return FALSE;
-
- offsets_array = value.data + value.size - offsets_array_size;
- length = offsets_array_size / offset_size;
-
- if (length == 0)
+ if (value.size != 0 && offsets.length == 0)
return FALSE;
child.type_info = g_variant_type_info_element (value.type_info);
@@ -803,14 +809,14 @@ gvs_variable_sized_array_is_normal (GVar
child.depth = value.depth + 1;
offset = 0;
- for (i = 0; i < length; i++)
+ for (i = 0; i < offsets.length; i++)
{
gsize this_end;
- this_end = gvs_read_unaligned_le (offsets_array + offset_size * i,
- offset_size);
+ this_end = gvs_read_unaligned_le (offsets.array + offsets.offset_size * i,
+ offsets.offset_size);
- if (this_end < offset || this_end > last_end)
+ if (this_end < offset || this_end > offsets.data_size)
return FALSE;
while (offset & alignment)
@@ -832,7 +838,7 @@ gvs_variable_sized_array_is_normal (GVar
offset = this_end;
}
- g_assert (offset == last_end);
+ g_assert (offset == offsets.data_size);
return TRUE;
}

View file

@ -0,0 +1,87 @@
From 5c27f22aff636766fbc5e49927fd28213629e840 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Tue, 25 Oct 2022 18:05:52 +0100
Subject: [PATCH 03/18] gvariant: Zero-initialise various GVariantSerialised
objects
The following few commits will add a couple of new fields to
`GVariantSerialised`, and they should be zero-filled by default.
Try and pre-empt that a bit by zero-filling `GVariantSerialised` by
default in a few places.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2121
---
glib/gvariant.c | 2 +-
glib/tests/gvariant.c | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -5988,7 +5988,7 @@ g_variant_byteswap (GVariant *value)
if (alignment)
/* (potentially) contains multi-byte numeric data */
{
- GVariantSerialised serialised;
+ GVariantSerialised serialised = { 0, };
GVariant *trusted;
GBytes *bytes;
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -1438,7 +1438,7 @@ test_maybe (void)
for (flavour = 0; flavour < 8; flavour += alignment)
{
- GVariantSerialised serialised;
+ GVariantSerialised serialised = { 0, };
GVariantSerialised child;
serialised.type_info = type_info;
@@ -1562,7 +1562,7 @@ test_array (void)
for (flavour = 0; flavour < 8; flavour += alignment)
{
- GVariantSerialised serialised;
+ GVariantSerialised serialised = { 0, };
serialised.type_info = array_info;
serialised.data = flavoured_malloc (needed_size, flavour);
@@ -1726,7 +1726,7 @@ test_tuple (void)
for (flavour = 0; flavour < 8; flavour += alignment)
{
- GVariantSerialised serialised;
+ GVariantSerialised serialised = { 0, };
serialised.type_info = type_info;
serialised.data = flavoured_malloc (needed_size, flavour);
@@ -1821,7 +1821,7 @@ test_variant (void)
for (flavour = 0; flavour < 8; flavour += alignment)
{
- GVariantSerialised serialised;
+ GVariantSerialised serialised = { 0, };
GVariantSerialised child;
serialised.type_info = type_info;
@@ -2268,7 +2268,7 @@ serialise_tree (TreeInstance *tree
static void
test_byteswap (void)
{
- GVariantSerialised one, two;
+ GVariantSerialised one = { 0, }, two = { 0, };
TreeInstance *tree;
tree = tree_instance_new (NULL, 3);
@@ -2342,7 +2342,7 @@ test_serialiser_children (void)
static void
test_fuzz (gdouble *fuzziness)
{
- GVariantSerialised serialised;
+ GVariantSerialised serialised = { 0, };
TreeInstance *tree;
/* make an instance */

View file

@ -0,0 +1,406 @@
From c8067857f7c8fb369ecb30bb534b018b2e2b8f87 Mon Sep 17 00:00:00 2001
From: William Manley <will@stb-tester.com>
Date: Mon, 29 Jun 2020 16:59:44 +0100
Subject: [PATCH 04/18] =?UTF-8?q?gvariant:=20Don=E2=80=99t=20allow=20child?=
=?UTF-8?q?=20elements=20to=20overlap=20with=20each=20other?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
If different elements of a variable sized array can overlap with each
other then we can cause a `GVariant` to normalise to a much larger type.
This commit changes the behaviour of `GVariant` with non-normal form data. If
an invalid frame offset is found all subsequent elements are given their
default value.
When retrieving an element at index `n` we scan the frame offsets up to index
`n` and if they are not in order we return an element with the default value
for that type. This guarantees that elements don't overlap with each
other. We remember the offset we've scanned up to so we don't need to
repeat this work on subsequent accesses. We skip these checks for trusted
data.
Unfortunately this makes random access of untrusted data O(n) — at least
on first access. It doesn't affect the algorithmic complexity of accessing
elements in order, such as when using the `GVariantIter` interface. Also:
the cost of validation will be amortised as the `GVariant` instance is
continued to be used.
I've implemented this with 4 different functions, 1 for each element size,
rather than looping calling `gvs_read_unaligned_le` in the hope that the
compiler will find it easy to optimise and should produce fairly tight
code.
Fixes: #2121
---
glib/gvariant-core.c | 35 ++++++++++++++++
glib/gvariant-serialiser.c | 86 ++++++++++++++++++++++++++++++++++++--
glib/gvariant-serialiser.h | 9 ++++
glib/tests/gvariant.c | 45 ++++++++++++++++++++
4 files changed, 172 insertions(+), 3 deletions(-)
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -65,6 +65,7 @@ struct _GVariant
{
GBytes *bytes;
gconstpointer data;
+ gsize ordered_offsets_up_to;
} serialised;
struct
@@ -162,6 +163,24 @@ struct _GVariant
* if .data pointed to the appropriate number of nul
* bytes.
*
+ * .ordered_offsets_up_to: If ordered_offsets_up_to == n this means that all
+ * the frame offsets up to and including the frame
+ * offset determining the end of element n are in
+ * order. This guarantees that the bytes of element
+ * n don't overlap with any previous element.
+ *
+ * For trusted data this is set to G_MAXSIZE and we
+ * don't check that the frame offsets are in order.
+ *
+ * Note: This doesn't imply the offsets are good in
+ * any way apart from their ordering. In particular
+ * offsets may be out of bounds for this value or
+ * may imply that the data overlaps the frame
+ * offsets themselves.
+ *
+ * This field is only relevant for arrays of non
+ * fixed width types.
+ *
* .tree: Only valid when the instance is in tree form.
*
* Note that accesses from other threads could result in
@@ -365,6 +384,7 @@ g_variant_to_serialised (GVariant *value
(gpointer) value->contents.serialised.data,
value->size,
value->depth,
+ value->contents.serialised.ordered_offsets_up_to,
};
return serialised;
}
@@ -396,6 +416,7 @@ g_variant_serialise (GVariant *value,
serialised.size = value->size;
serialised.data = data;
serialised.depth = value->depth;
+ serialised.ordered_offsets_up_to = 0;
children = (gpointer *) value->contents.tree.children;
n_children = value->contents.tree.n_children;
@@ -439,6 +460,15 @@ g_variant_fill_gvs (GVariantSerialised *
g_assert (serialised->size == value->size);
serialised->depth = value->depth;
+ if (value->state & STATE_SERIALISED)
+ {
+ serialised->ordered_offsets_up_to = value->contents.serialised.ordered_offsets_up_to;
+ }
+ else
+ {
+ serialised->ordered_offsets_up_to = 0;
+ }
+
if (serialised->data)
/* g_variant_store() is a public API, so it
* it will reacquire the lock if it needs to.
@@ -481,6 +511,7 @@ g_variant_ensure_serialised (GVariant *v
bytes = g_bytes_new_take (data, value->size);
value->contents.serialised.data = g_bytes_get_data (bytes, NULL);
value->contents.serialised.bytes = bytes;
+ value->contents.serialised.ordered_offsets_up_to = G_MAXSIZE;
value->state |= STATE_SERIALISED;
}
}
@@ -561,6 +592,7 @@ g_variant_new_from_bytes (const GVariant
serialised.type_info = value->type_info;
serialised.data = (guchar *) g_bytes_get_data (bytes, &serialised.size);
serialised.depth = 0;
+ serialised.ordered_offsets_up_to = trusted ? G_MAXSIZE : 0;
if (!g_variant_serialised_check (serialised))
{
@@ -611,6 +643,8 @@ g_variant_new_from_bytes (const GVariant
value->contents.serialised.data = g_bytes_get_data (bytes, &value->size);
}
+ value->contents.serialised.ordered_offsets_up_to = trusted ? G_MAXSIZE : 0;
+
g_clear_pointer (&owned_bytes, g_bytes_unref);
return value;
@@ -1130,6 +1164,7 @@ g_variant_get_child_value (GVariant *val
child->contents.serialised.bytes =
g_bytes_ref (value->contents.serialised.bytes);
child->contents.serialised.data = s_child.data;
+ child->contents.serialised.ordered_offsets_up_to = s_child.ordered_offsets_up_to;
return child;
}
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -1,6 +1,7 @@
/*
* Copyright © 2007, 2008 Ryan Lortie
* Copyright © 2010 Codethink Limited
+ * Copyright © 2020 William Manley
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -264,6 +265,7 @@ gvs_fixed_sized_maybe_get_child (GVarian
value.type_info = g_variant_type_info_element (value.type_info);
g_variant_type_info_ref (value.type_info);
value.depth++;
+ value.ordered_offsets_up_to = 0;
return value;
}
@@ -295,7 +297,7 @@ gvs_fixed_sized_maybe_serialise (GVarian
{
if (n_children)
{
- GVariantSerialised child = { NULL, value.data, value.size, value.depth + 1 };
+ GVariantSerialised child = { NULL, value.data, value.size, value.depth + 1, 0 };
gvs_filler (&child, children[0]);
}
@@ -317,6 +319,7 @@ gvs_fixed_sized_maybe_is_normal (GVarian
/* proper element size: "Just". recurse to the child. */
value.type_info = g_variant_type_info_element (value.type_info);
value.depth++;
+ value.ordered_offsets_up_to = 0;
return g_variant_serialised_is_normal (value);
}
@@ -358,6 +361,7 @@ gvs_variable_sized_maybe_get_child (GVar
value.data = NULL;
value.depth++;
+ value.ordered_offsets_up_to = 0;
return value;
}
@@ -388,7 +392,7 @@ gvs_variable_sized_maybe_serialise (GVar
{
if (n_children)
{
- GVariantSerialised child = { NULL, value.data, value.size - 1, value.depth + 1 };
+ GVariantSerialised child = { NULL, value.data, value.size - 1, value.depth + 1, 0 };
/* write the data for the child. */
gvs_filler (&child, children[0]);
@@ -408,6 +412,7 @@ gvs_variable_sized_maybe_is_normal (GVar
value.type_info = g_variant_type_info_element (value.type_info);
value.size--;
value.depth++;
+ value.ordered_offsets_up_to = 0;
return g_variant_serialised_is_normal (value);
}
@@ -691,6 +696,32 @@ gvs_variable_sized_array_n_children (GVa
return gvs_variable_sized_array_get_frame_offsets (value).length;
}
+/* Find the index of the first out-of-order element in @data, assuming that
+ * @data is an array of elements of given @type, starting at index @start and
+ * containing a further @len-@start elements. */
+#define DEFINE_FIND_UNORDERED(type) \
+ static gsize \
+ find_unordered_##type (const guint8 *data, gsize start, gsize len) \
+ { \
+ gsize off; \
+ type current, previous; \
+ \
+ memcpy (&previous, data + start * sizeof (current), sizeof (current)); \
+ for (off = (start + 1) * sizeof (current); off < len * sizeof (current); off += sizeof (current)) \
+ { \
+ memcpy (&current, data + off, sizeof (current)); \
+ if (current < previous) \
+ break; \
+ previous = current; \
+ } \
+ return off / sizeof (current) - 1; \
+ }
+
+DEFINE_FIND_UNORDERED (guint8);
+DEFINE_FIND_UNORDERED (guint16);
+DEFINE_FIND_UNORDERED (guint32);
+DEFINE_FIND_UNORDERED (guint64);
+
static GVariantSerialised
gvs_variable_sized_array_get_child (GVariantSerialised value,
gsize index_)
@@ -706,6 +737,49 @@ gvs_variable_sized_array_get_child (GVar
g_variant_type_info_ref (child.type_info);
child.depth = value.depth + 1;
+ /* If the requested @index_ is beyond the set of indices whose framing offsets
+ * have been checked, check the remaining offsets to see whether theyre
+ * normal (in order, no overlapping array elements). */
+ if (index_ > value.ordered_offsets_up_to)
+ {
+ switch (offsets.offset_size)
+ {
+ case 1:
+ {
+ value.ordered_offsets_up_to = find_unordered_guint8 (
+ offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ break;
+ }
+ case 2:
+ {
+ value.ordered_offsets_up_to = find_unordered_guint16 (
+ offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ break;
+ }
+ case 4:
+ {
+ value.ordered_offsets_up_to = find_unordered_guint32 (
+ offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ break;
+ }
+ case 8:
+ {
+ value.ordered_offsets_up_to = find_unordered_guint64 (
+ offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ break;
+ }
+ default:
+ /* gvs_get_offset_size() only returns maximum 8 */
+ g_assert_not_reached ();
+ }
+ }
+
+ if (index_ > value.ordered_offsets_up_to)
+ {
+ /* Offsets are invalid somewhere, so return an empty child. */
+ return child;
+ }
+
if (index_ > 0)
{
guint alignment;
@@ -840,6 +914,9 @@ gvs_variable_sized_array_is_normal (GVar
g_assert (offset == offsets.data_size);
+ /* All offsets have now been checked. */
+ value.ordered_offsets_up_to = G_MAXSIZE;
+
return TRUE;
}
@@ -1072,7 +1149,7 @@ gvs_tuple_is_normal (GVariantSerialised
for (i = 0; i < length; i++)
{
const GVariantMemberInfo *member_info;
- GVariantSerialised child;
+ GVariantSerialised child = { 0, };
gsize fixed_size;
guint alignment;
gsize end;
@@ -1132,6 +1209,9 @@ gvs_tuple_is_normal (GVariantSerialised
offset = end;
}
+ /* All element bounds have been checked above. */
+ value.ordered_offsets_up_to = G_MAXSIZE;
+
{
gsize fixed_size;
guint alignment;
--- a/glib/gvariant-serialiser.h
+++ b/glib/gvariant-serialiser.h
@@ -29,6 +29,15 @@ typedef struct
guchar *data;
gsize size;
gsize depth; /* same semantics as GVariant.depth */
+
+ /* If ordered_offsets_up_to == n this means that all the frame offsets up to and
+ * including the frame offset determining the end of element n are in order.
+ * This guarantees that the bytes of element n don't overlap with any previous
+ * element.
+ *
+ * This is both read and set by g_variant_serialised_get_child for arrays of
+ * non-fixed-width types */
+ gsize ordered_offsets_up_to;
} GVariantSerialised;
/* deserialization */
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -1,5 +1,6 @@
/*
* Copyright © 2010 Codethink Limited
+ * Copyright © 2020 William Manley
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1279,6 +1280,7 @@ random_instance_filler (GVariantSerialis
serialised->size = instance->size;
serialised->depth = 0;
+ serialised->ordered_offsets_up_to = 0;
g_assert_true (serialised->type_info == instance->type_info);
g_assert_cmpuint (serialised->size, ==, instance->size);
@@ -5031,6 +5033,47 @@ test_normal_checking_array_offsets (void
g_variant_unref (variant);
}
+/* This is a regression test that we can't have non-normal values that take up
+ * significantly more space than the normal equivalent, by specifying the
+ * offset table entries so that array elements overlap.
+ *
+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2121#note_832242 */
+static void
+test_normal_checking_array_offsets2 (void)
+{
+ const guint8 data[] = {
+ 'h', 'i', '\0',
+ 0x03, 0x00, 0x03,
+ 0x06, 0x00, 0x06,
+ 0x09, 0x00, 0x09,
+ 0x0c, 0x00, 0x0c,
+ 0x0f, 0x00, 0x0f,
+ 0x12, 0x00, 0x12,
+ 0x15, 0x00, 0x15,
+ };
+ gsize size = sizeof (data);
+ const GVariantType *aaaaaaas = G_VARIANT_TYPE ("aaaaaaas");
+ GVariant *variant = NULL;
+ GVariant *normal_variant = NULL;
+ GVariant *expected = NULL;
+
+ variant = g_variant_new_from_data (aaaaaaas, data, size, FALSE, NULL, NULL);
+ g_assert_nonnull (variant);
+
+ normal_variant = g_variant_get_normal_form (variant);
+ g_assert_nonnull (normal_variant);
+ g_assert_cmpuint (g_variant_get_size (normal_variant), <=, size * 2);
+
+ expected = g_variant_new_parsed (
+ "[[[[[[['hi', '', ''], [], []], [], []], [], []], [], []], [], []], [], []]");
+ g_assert_cmpvariant (expected, variant);
+ g_assert_cmpvariant (expected, normal_variant);
+
+ g_variant_unref (expected);
+ g_variant_unref (normal_variant);
+ g_variant_unref (variant);
+}
+
/* Test that a tuple with invalidly large values in its offset table is
* normalised successfully without looping infinitely. */
static void
@@ -5197,6 +5240,8 @@ main (int argc, char **argv)
test_normal_checking_tuples);
g_test_add_func ("/gvariant/normal-checking/array-offsets",
test_normal_checking_array_offsets);
+ g_test_add_func ("/gvariant/normal-checking/array-offsets2",
+ test_normal_checking_array_offsets2);
g_test_add_func ("/gvariant/normal-checking/tuple-offsets",
test_normal_checking_tuple_offsets);
g_test_add_func ("/gvariant/normal-checking/empty-object-path",

View file

@ -0,0 +1,104 @@
From 66e7c10aa1ec3102c49186f83671a5f0461ffbc0 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Fri, 7 Jan 2022 15:03:52 +0000
Subject: [PATCH 05/18] gvariant-serialiser: Factor out code to get bounds of a
tuple member
This introduces no functional changes.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2121
---
glib/gvariant-serialiser.c | 73 ++++++++++++++++++++++++--------------
1 file changed, 46 insertions(+), 27 deletions(-)
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -942,6 +942,51 @@ gvs_variable_sized_array_is_normal (GVar
* for the tuple. See the notes in gvarianttypeinfo.h.
*/
+static void
+gvs_tuple_get_member_bounds (GVariantSerialised value,
+ gsize index_,
+ gsize offset_size,
+ gsize *out_member_start,
+ gsize *out_member_end)
+{
+ const GVariantMemberInfo *member_info;
+ gsize member_start, member_end;
+
+ member_info = g_variant_type_info_member_info (value.type_info, index_);
+
+ if (member_info->i + 1)
+ member_start = gvs_read_unaligned_le (value.data + value.size -
+ offset_size * (member_info->i + 1),
+ offset_size);
+ else
+ member_start = 0;
+
+ member_start += member_info->a;
+ member_start &= member_info->b;
+ member_start |= member_info->c;
+
+ if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_LAST)
+ member_end = value.size - offset_size * (member_info->i + 1);
+
+ else if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_FIXED)
+ {
+ gsize fixed_size;
+
+ g_variant_type_info_query (member_info->type_info, NULL, &fixed_size);
+ member_end = member_start + fixed_size;
+ }
+
+ else /* G_VARIANT_MEMBER_ENDING_OFFSET */
+ member_end = gvs_read_unaligned_le (value.data + value.size -
+ offset_size * (member_info->i + 2),
+ offset_size);
+
+ if (out_member_start != NULL)
+ *out_member_start = member_start;
+ if (out_member_end != NULL)
+ *out_member_end = member_end;
+}
+
static gsize
gvs_tuple_n_children (GVariantSerialised value)
{
@@ -997,33 +1042,7 @@ gvs_tuple_get_child (GVariantSerialised
}
}
- if (member_info->i + 1)
- start = gvs_read_unaligned_le (value.data + value.size -
- offset_size * (member_info->i + 1),
- offset_size);
- else
- start = 0;
-
- start += member_info->a;
- start &= member_info->b;
- start |= member_info->c;
-
- if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_LAST)
- end = value.size - offset_size * (member_info->i + 1);
-
- else if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_FIXED)
- {
- gsize fixed_size;
-
- g_variant_type_info_query (child.type_info, NULL, &fixed_size);
- end = start + fixed_size;
- child.size = fixed_size;
- }
-
- else /* G_VARIANT_MEMBER_ENDING_OFFSET */
- end = gvs_read_unaligned_le (value.data + value.size -
- offset_size * (member_info->i + 2),
- offset_size);
+ gvs_tuple_get_member_bounds (value, index_, offset_size, &start, &end);
/* The child should not extend into the offset table. */
if (index_ != g_variant_type_info_n_members (value.type_info) - 1)

View file

@ -0,0 +1,74 @@
From a62a6b5d3e53b30a4628db2a077ab9ed03605748 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Fri, 7 Jan 2022 16:37:29 +0000
Subject: [PATCH 06/18] gvariant-serialiser: Rework child size calculation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reduces a few duplicate calls to `g_variant_type_info_query()` and
explains why theyre needed.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2121
---
glib/gvariant-serialiser.c | 31 +++++++++----------------------
1 file changed, 9 insertions(+), 22 deletions(-)
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -1007,14 +1007,18 @@ gvs_tuple_get_child (GVariantSerialised
child.depth = value.depth + 1;
offset_size = gvs_get_offset_size (value.size);
+ /* Ensure the size is set for fixed-sized children, or
+ * g_variant_serialised_check() will fail, even if we return
+ * (child.data == NULL) to indicate an error. */
+ if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_FIXED)
+ g_variant_type_info_query (child.type_info, NULL, &child.size);
+
/* tuples are the only (potentially) fixed-sized containers, so the
* only ones that have to deal with the possibility of having %NULL
* data with a non-zero %size if errors occurred elsewhere.
*/
if G_UNLIKELY (value.data == NULL && value.size != 0)
{
- g_variant_type_info_query (child.type_info, NULL, &child.size);
-
/* this can only happen in fixed-sized tuples,
* so the child must also be fixed sized.
*/
@@ -1032,29 +1036,12 @@ gvs_tuple_get_child (GVariantSerialised
else
{
if (offset_size * (member_info->i + 1) > value.size)
- {
- /* if the child is fixed size, return its size.
- * if child is not fixed-sized, return size = 0.
- */
- g_variant_type_info_query (child.type_info, NULL, &child.size);
-
- return child;
- }
+ return child;
}
- gvs_tuple_get_member_bounds (value, index_, offset_size, &start, &end);
-
/* The child should not extend into the offset table. */
- if (index_ != g_variant_type_info_n_members (value.type_info) - 1)
- {
- GVariantSerialised last_child;
- last_child = gvs_tuple_get_child (value,
- g_variant_type_info_n_members (value.type_info) - 1);
- last_end = last_child.data + last_child.size - value.data;
- g_variant_type_info_unref (last_child.type_info);
- }
- else
- last_end = end;
+ gvs_tuple_get_member_bounds (value, index_, offset_size, &start, &end);
+ gvs_tuple_get_member_bounds (value, g_variant_type_info_n_members (value.type_info) - 1, offset_size, NULL, &last_end);
if (start < end && end <= value.size && end <= last_end)
{

View file

@ -0,0 +1,382 @@
From 2d55b3b74b1bc256e91a9d0d59120570376e6acc Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Fri, 7 Jan 2022 16:42:14 +0000
Subject: [PATCH 07/18] =?UTF-8?q?gvariant:=20Don=E2=80=99t=20allow=20child?=
=?UTF-8?q?=20elements=20of=20a=20tuple=20to=20overlap=20each=20other?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This is similar to the earlier commit which prevents child elements of a
variable-sized array from overlapping each other, but this time for
tuples. It is based heavily on ideas by William Manley.
Tuples are slightly different from variable-sized arrays in that they
contain a mixture of fixed and variable sized elements. All but one of
the variable sized elements have an entry in the frame offsets table.
This means that if we were to just check the ordering of the frame
offsets table, the variable sized elements could still overlap
interleaving fixed sized elements, which would be bad.
Therefore we have to check the elements rather than the frame offsets.
The logic of checking the elements up to the index currently being
requested, and caching the result in `ordered_offsets_up_to`, means that
the algorithmic cost implications are the same for this commit as for
variable-sized arrays: an O(N) cost for these checks is amortised out
over N accesses to O(1) per access.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: #2121
---
glib/gvariant-core.c | 6 +-
glib/gvariant-serialiser.c | 40 ++++++++
glib/gvariant-serialiser.h | 7 +-
glib/gvariant.c | 1 +
glib/tests/gvariant.c | 181 +++++++++++++++++++++++++++++++++++++
5 files changed, 232 insertions(+), 3 deletions(-)
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -1,6 +1,7 @@
/*
* Copyright © 2007, 2008 Ryan Lortie
* Copyright © 2010 Codethink Limited
+ * Copyright © 2022 Endless OS Foundation, LLC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -179,7 +180,7 @@ struct _GVariant
* offsets themselves.
*
* This field is only relevant for arrays of non
- * fixed width types.
+ * fixed width types and for tuples.
*
* .tree: Only valid when the instance is in tree form.
*
@@ -1139,6 +1140,9 @@ g_variant_get_child_value (GVariant *val
*/
s_child = g_variant_serialised_get_child (serialised, index_);
+ /* Update the cached ordered_offsets_up_to, since @serialised will be thrown away when this function exits */
+ value->contents.serialised.ordered_offsets_up_to = MAX (value->contents.serialised.ordered_offsets_up_to, serialised.ordered_offsets_up_to);
+
/* Check whether this would cause nesting too deep. If so, return a fake
* child. The only situation we expect this to happen in is with a variant,
* as all other deeply-nested types have a static type, and hence should
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -942,6 +942,10 @@ gvs_variable_sized_array_is_normal (GVar
* for the tuple. See the notes in gvarianttypeinfo.h.
*/
+/* Note: This doesnt guarantee that @out_member_end >= @out_member_start; that
+ * condition may not hold true for invalid serialised variants. The caller is
+ * responsible for checking the returned values and handling invalid ones
+ * appropriately. */
static void
gvs_tuple_get_member_bounds (GVariantSerialised value,
gsize index_,
@@ -1028,6 +1032,42 @@ gvs_tuple_get_child (GVariantSerialised
return child;
}
+ /* If the requested @index_ is beyond the set of indices whose framing offsets
+ * have been checked, check the remaining offsets to see whether theyre
+ * normal (in order, no overlapping tuple elements).
+ *
+ * Unlike the checks in gvs_variable_sized_array_get_child(), we have to check
+ * all the tuple *elements* here, not just all the framing offsets, since
+ * tuples contain a mix of elements which use framing offsets and ones which
+ * dont. None of them are allowed to overlap. */
+ if (index_ > value.ordered_offsets_up_to)
+ {
+ gsize i, prev_i_end = 0;
+
+ if (value.ordered_offsets_up_to > 0)
+ gvs_tuple_get_member_bounds (value, value.ordered_offsets_up_to - 1, offset_size, NULL, &prev_i_end);
+
+ for (i = value.ordered_offsets_up_to; i <= index_; i++)
+ {
+ gsize i_start, i_end;
+
+ gvs_tuple_get_member_bounds (value, i, offset_size, &i_start, &i_end);
+
+ if (i_start > i_end || i_start < prev_i_end || i_end > value.size)
+ break;
+
+ prev_i_end = i_end;
+ }
+
+ value.ordered_offsets_up_to = i - 1;
+ }
+
+ if (index_ > value.ordered_offsets_up_to)
+ {
+ /* Offsets are invalid somewhere, so return an empty child. */
+ return child;
+ }
+
if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_OFFSET)
{
if (offset_size * (member_info->i + 2) > value.size)
--- a/glib/gvariant-serialiser.h
+++ b/glib/gvariant-serialiser.h
@@ -35,8 +35,11 @@ typedef struct
* This guarantees that the bytes of element n don't overlap with any previous
* element.
*
- * This is both read and set by g_variant_serialised_get_child for arrays of
- * non-fixed-width types */
+ * This is both read and set by g_variant_serialised_get_child() for arrays of
+ * non-fixed-width types, and for tuples.
+ *
+ * Even when dealing with tuples, @ordered_offsets_up_to is an element index,
+ * rather than an index into the frame offsets. */
gsize ordered_offsets_up_to;
} GVariantSerialised;
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -5997,6 +5997,7 @@ g_variant_byteswap (GVariant *value)
serialised.size = g_variant_get_size (trusted);
serialised.data = g_malloc (serialised.size);
serialised.depth = g_variant_get_depth (trusted);
+ serialised.ordered_offsets_up_to = G_MAXSIZE; /* operating on the normal form */
g_variant_store (trusted, serialised.data);
g_variant_unref (trusted);
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -1,6 +1,7 @@
/*
* Copyright © 2010 Codethink Limited
* Copyright © 2020 William Manley
+ * Copyright © 2022 Endless OS Foundation, LLC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1447,6 +1448,7 @@ test_maybe (void)
serialised.data = flavoured_malloc (needed_size, flavour);
serialised.size = needed_size;
serialised.depth = 0;
+ serialised.ordered_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised,
random_instance_filler,
@@ -1570,6 +1572,7 @@ test_array (void)
serialised.data = flavoured_malloc (needed_size, flavour);
serialised.size = needed_size;
serialised.depth = 0;
+ serialised.ordered_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised, random_instance_filler,
(gpointer *) instances, n_children);
@@ -1734,6 +1737,7 @@ test_tuple (void)
serialised.data = flavoured_malloc (needed_size, flavour);
serialised.size = needed_size;
serialised.depth = 0;
+ serialised.ordered_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised, random_instance_filler,
(gpointer *) instances, n_children);
@@ -1830,6 +1834,7 @@ test_variant (void)
serialised.data = flavoured_malloc (needed_size, flavour);
serialised.size = needed_size;
serialised.depth = 0;
+ serialised.ordered_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised, random_instance_filler,
(gpointer *) &instance, 1);
@@ -5098,6 +5103,176 @@ test_normal_checking_tuple_offsets (void
g_variant_unref (variant);
}
+/* This is a regression test that we can't have non-normal values that take up
+ * significantly more space than the normal equivalent, by specifying the
+ * offset table entries so that tuple elements overlap.
+ *
+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2121#note_838503 and
+ * https://gitlab.gnome.org/GNOME/glib/-/issues/2121#note_838513 */
+static void
+test_normal_checking_tuple_offsets2 (void)
+{
+ const GVariantType *data_type = G_VARIANT_TYPE ("(yyaiyyaiyy)");
+ const guint8 data[] = {
+ 0x12, 0x34, 0x56, 0x78, 0x01,
+ /*
+ ^───────────────────┘
+
+ ^^^^^^^^^^ 1st yy
+ ^^^^^^^^^^ 2nd yy
+ ^^^^^^^^^^ 3rd yy
+ ^^^^ Framing offsets
+ */
+
+ /* If this variant was encoded normally, it would be something like this:
+ * 0x12, 0x34, pad, pad, [array bytes], 0x56, 0x78, pad, pad, [array bytes], 0x9A, 0xBC, 0xXX
+ * ^─────────────────────────────────────────────────────┘
+ *
+ * ^^^^^^^^^^ 1st yy
+ * ^^^^^^^^^^ 2nd yy
+ * ^^^^^^^^^^ 3rd yy
+ * ^^^^ Framing offsets
+ */
+ };
+ gsize size = sizeof (data);
+ GVariant *variant = NULL;
+ GVariant *normal_variant = NULL;
+ GVariant *expected = NULL;
+
+ variant = g_variant_new_from_data (data_type, data, size, FALSE, NULL, NULL);
+ g_assert_nonnull (variant);
+
+ normal_variant = g_variant_get_normal_form (variant);
+ g_assert_nonnull (normal_variant);
+ g_assert_cmpuint (g_variant_get_size (normal_variant), <=, size * 3);
+
+ expected = g_variant_new_parsed (
+ "@(yyaiyyaiyy) (0x12, 0x34, [], 0x00, 0x00, [], 0x00, 0x00)");
+ g_assert_cmpvariant (expected, variant);
+ g_assert_cmpvariant (expected, normal_variant);
+
+ g_variant_unref (expected);
+ g_variant_unref (normal_variant);
+ g_variant_unref (variant);
+}
+
+/* This is a regression test that overlapping entries in the offset table are
+ * decoded consistently, even though theyre non-normal.
+ *
+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2121#note_910935 */
+static void
+test_normal_checking_tuple_offsets3 (void)
+{
+ /* The expected decoding of this non-normal byte stream is complex. See
+ * section 2.7.3 (Handling Non-Normal Serialised Data) of the GVariant
+ * specification.
+ *
+ * The rule “Child Values Overlapping Framing Offsets” from the specification
+ * says that the first `ay` must be decoded as `[0x01]` even though it
+ * overlaps the first byte of the offset table. However, since commit
+ * 7eedcd76f7d5b8c98fa60013e1fe6e960bf19df3, GLib explicitly doesnt allow
+ * this as its exploitable. So the first `ay` must be given a default value.
+ *
+ * The second and third `ay`s must be given default values because of rule
+ * “End Boundary Precedes Start Boundary”.
+ *
+ * The `i` must be given a default value because of rule “Start or End
+ * Boundary of a Child Falls Outside the Container”.
+ */
+ const GVariantType *data_type = G_VARIANT_TYPE ("(ayayiay)");
+ const guint8 data[] = {
+ 0x01, 0x00, 0x02,
+ /*
+ ^──┘
+
+ ^^^^^^^^^^ 1st ay, bytes 0-2 (but given a default value anyway, see above)
+ 2nd ay, bytes 2-0
+ i, bytes 0-4
+ 3rd ay, bytes 4-1
+ ^^^^^^^^^^ Framing offsets
+ */
+ };
+ gsize size = sizeof (data);
+ GVariant *variant = NULL;
+ GVariant *normal_variant = NULL;
+ GVariant *expected = NULL;
+
+ variant = g_variant_new_from_data (data_type, data, size, FALSE, NULL, NULL);
+ g_assert_nonnull (variant);
+
+ g_assert_false (g_variant_is_normal_form (variant));
+
+ normal_variant = g_variant_get_normal_form (variant);
+ g_assert_nonnull (normal_variant);
+ g_assert_cmpuint (g_variant_get_size (normal_variant), <=, size * 3);
+
+ expected = g_variant_new_parsed ("@(ayayiay) ([], [], 0, [])");
+ g_assert_cmpvariant (expected, variant);
+ g_assert_cmpvariant (expected, normal_variant);
+
+ g_variant_unref (expected);
+ g_variant_unref (normal_variant);
+ g_variant_unref (variant);
+}
+
+/* This is a regression test that overlapping entries in the offset table are
+ * decoded consistently, even though theyre non-normal.
+ *
+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2121#note_910935 */
+static void
+test_normal_checking_tuple_offsets4 (void)
+{
+ /* The expected decoding of this non-normal byte stream is complex. See
+ * section 2.7.3 (Handling Non-Normal Serialised Data) of the GVariant
+ * specification.
+ *
+ * The rule “Child Values Overlapping Framing Offsets” from the specification
+ * says that the first `ay` must be decoded as `[0x01]` even though it
+ * overlaps the first byte of the offset table. However, since commit
+ * 7eedcd76f7d5b8c98fa60013e1fe6e960bf19df3, GLib explicitly doesnt allow
+ * this as its exploitable. So the first `ay` must be given a default value.
+ *
+ * The second `ay` must be given a default value because of rule “End Boundary
+ * Precedes Start Boundary”.
+ *
+ * The third `ay` must be given a default value because its framing offsets
+ * overlap that of the first `ay`.
+ */
+ const GVariantType *data_type = G_VARIANT_TYPE ("(ayayay)");
+ const guint8 data[] = {
+ 0x01, 0x00, 0x02,
+ /*
+ ^──┘
+
+ ^^^^^^^^^^ 1st ay, bytes 0-2 (but given a default value anyway, see above)
+ 2nd ay, bytes 2-0
+ 3rd ay, bytes 0-1
+ ^^^^^^^^^^ Framing offsets
+ */
+ };
+ gsize size = sizeof (data);
+ GVariant *variant = NULL;
+ GVariant *normal_variant = NULL;
+ GVariant *expected = NULL;
+
+ variant = g_variant_new_from_data (data_type, data, size, FALSE, NULL, NULL);
+ g_assert_nonnull (variant);
+
+ g_assert_false (g_variant_is_normal_form (variant));
+
+ normal_variant = g_variant_get_normal_form (variant);
+ g_assert_nonnull (normal_variant);
+ g_assert_cmpuint (g_variant_get_size (normal_variant), <=, size * 3);
+
+ expected = g_variant_new_parsed ("@(ayayay) ([], [], [])");
+ g_assert_cmpvariant (expected, variant);
+ g_assert_cmpvariant (expected, normal_variant);
+
+ g_variant_unref (expected);
+ g_variant_unref (normal_variant);
+ g_variant_unref (variant);
+}
+
/* Test that an empty object path is normalised successfully to the base object
* path, /. */
static void
@@ -5244,6 +5419,12 @@ main (int argc, char **argv)
test_normal_checking_array_offsets2);
g_test_add_func ("/gvariant/normal-checking/tuple-offsets",
test_normal_checking_tuple_offsets);
+ g_test_add_func ("/gvariant/normal-checking/tuple-offsets2",
+ test_normal_checking_tuple_offsets2);
+ g_test_add_func ("/gvariant/normal-checking/tuple-offsets3",
+ test_normal_checking_tuple_offsets3);
+ g_test_add_func ("/gvariant/normal-checking/tuple-offsets4",
+ test_normal_checking_tuple_offsets4);
g_test_add_func ("/gvariant/normal-checking/empty-object-path",
test_normal_checking_empty_object_path);

View file

@ -0,0 +1,378 @@
From a6cb880af0a0932493ba096f01990e694e2c5b72 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Tue, 25 Oct 2022 15:14:14 +0100
Subject: [PATCH 08/18] gvariant: Track checked and ordered offsets
independently
The past few commits introduced the concept of known-good offsets in the
offset table (which is used for variable-width arrays and tuples).
Good offsets are ones which are non-overlapping with all the previous
offsets in the table.
If a bad offset is encountered when indexing into the array or tuple,
the cached known-good offset index will not be increased. In this way,
all child variants at and beyond the first bad offset can be returned as
default values rather than dereferencing potentially invalid data.
In this case, there was no information about the fact that the indexes
between the highest known-good index and the requested one had been
checked already. That could lead to a pathological case where an offset
table with an invalid first offset is repeatedly checked in full when
trying to access higher-indexed children.
Avoid that by storing the index of the highest checked offset in the
table, as well as the index of the highest good/ordered offset.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2121
---
glib/gvariant-core.c | 28 ++++++++++++++++++++++++
glib/gvariant-serialiser.c | 44 +++++++++++++++++++++++++++-----------
glib/gvariant-serialiser.h | 9 ++++++++
glib/gvariant.c | 1 +
glib/tests/gvariant.c | 5 +++++
5 files changed, 75 insertions(+), 12 deletions(-)
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -67,6 +67,7 @@ struct _GVariant
GBytes *bytes;
gconstpointer data;
gsize ordered_offsets_up_to;
+ gsize checked_offsets_up_to;
} serialised;
struct
@@ -182,6 +183,24 @@ struct _GVariant
* This field is only relevant for arrays of non
* fixed width types and for tuples.
*
+ * .checked_offsets_up_to: Similarly to .ordered_offsets_up_to, this stores
+ * the index of the highest element, n, whose frame
+ * offsets (and all the preceding frame offsets)
+ * have been checked for validity.
+ *
+ * It is always the case that
+ * .checked_offsets_up_to ≥ .ordered_offsets_up_to.
+ *
+ * If .checked_offsets_up_to == .ordered_offsets_up_to,
+ * then a bad offset has not been found so far.
+ *
+ * If .checked_offsets_up_to > .ordered_offsets_up_to,
+ * then a bad offset has been found at
+ * (.ordered_offsets_up_to + 1).
+ *
+ * This field is only relevant for arrays of non
+ * fixed width types and for tuples.
+ *
* .tree: Only valid when the instance is in tree form.
*
* Note that accesses from other threads could result in
@@ -386,6 +405,7 @@ g_variant_to_serialised (GVariant *value
value->size,
value->depth,
value->contents.serialised.ordered_offsets_up_to,
+ value->contents.serialised.checked_offsets_up_to,
};
return serialised;
}
@@ -418,6 +438,7 @@ g_variant_serialise (GVariant *value,
serialised.data = data;
serialised.depth = value->depth;
serialised.ordered_offsets_up_to = 0;
+ serialised.checked_offsets_up_to = 0;
children = (gpointer *) value->contents.tree.children;
n_children = value->contents.tree.n_children;
@@ -464,10 +485,12 @@ g_variant_fill_gvs (GVariantSerialised *
if (value->state & STATE_SERIALISED)
{
serialised->ordered_offsets_up_to = value->contents.serialised.ordered_offsets_up_to;
+ serialised->checked_offsets_up_to = value->contents.serialised.checked_offsets_up_to;
}
else
{
serialised->ordered_offsets_up_to = 0;
+ serialised->checked_offsets_up_to = 0;
}
if (serialised->data)
@@ -513,6 +536,7 @@ g_variant_ensure_serialised (GVariant *v
value->contents.serialised.data = g_bytes_get_data (bytes, NULL);
value->contents.serialised.bytes = bytes;
value->contents.serialised.ordered_offsets_up_to = G_MAXSIZE;
+ value->contents.serialised.checked_offsets_up_to = G_MAXSIZE;
value->state |= STATE_SERIALISED;
}
}
@@ -594,6 +618,7 @@ g_variant_new_from_bytes (const GVariant
serialised.data = (guchar *) g_bytes_get_data (bytes, &serialised.size);
serialised.depth = 0;
serialised.ordered_offsets_up_to = trusted ? G_MAXSIZE : 0;
+ serialised.checked_offsets_up_to = trusted ? G_MAXSIZE : 0;
if (!g_variant_serialised_check (serialised))
{
@@ -645,6 +670,7 @@ g_variant_new_from_bytes (const GVariant
}
value->contents.serialised.ordered_offsets_up_to = trusted ? G_MAXSIZE : 0;
+ value->contents.serialised.checked_offsets_up_to = trusted ? G_MAXSIZE : 0;
g_clear_pointer (&owned_bytes, g_bytes_unref);
@@ -1142,6 +1168,7 @@ g_variant_get_child_value (GVariant *val
/* Update the cached ordered_offsets_up_to, since @serialised will be thrown away when this function exits */
value->contents.serialised.ordered_offsets_up_to = MAX (value->contents.serialised.ordered_offsets_up_to, serialised.ordered_offsets_up_to);
+ value->contents.serialised.checked_offsets_up_to = MAX (value->contents.serialised.checked_offsets_up_to, serialised.checked_offsets_up_to);
/* Check whether this would cause nesting too deep. If so, return a fake
* child. The only situation we expect this to happen in is with a variant,
@@ -1169,6 +1196,7 @@ g_variant_get_child_value (GVariant *val
g_bytes_ref (value->contents.serialised.bytes);
child->contents.serialised.data = s_child.data;
child->contents.serialised.ordered_offsets_up_to = s_child.ordered_offsets_up_to;
+ child->contents.serialised.checked_offsets_up_to = s_child.checked_offsets_up_to;
return child;
}
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -120,6 +120,8 @@
*
* @depth has no restrictions; the depth of a top-level serialized #GVariant is
* zero, and it increases for each level of nested child.
+ *
+ * @checked_offsets_up_to is always ≥ @ordered_offsets_up_to
*/
/* < private >
@@ -147,6 +149,9 @@ g_variant_serialised_check (GVariantSeri
!(serialised.size == 0 || serialised.data != NULL))
return FALSE;
+ if (serialised.ordered_offsets_up_to > serialised.checked_offsets_up_to)
+ return FALSE;
+
/* Depending on the native alignment requirements of the machine, the
* compiler will insert either 3 or 7 padding bytes after the char.
* This will result in the sizeof() the struct being 12 or 16.
@@ -266,6 +271,7 @@ gvs_fixed_sized_maybe_get_child (GVarian
g_variant_type_info_ref (value.type_info);
value.depth++;
value.ordered_offsets_up_to = 0;
+ value.checked_offsets_up_to = 0;
return value;
}
@@ -297,7 +303,7 @@ gvs_fixed_sized_maybe_serialise (GVarian
{
if (n_children)
{
- GVariantSerialised child = { NULL, value.data, value.size, value.depth + 1, 0 };
+ GVariantSerialised child = { NULL, value.data, value.size, value.depth + 1, 0, 0 };
gvs_filler (&child, children[0]);
}
@@ -320,6 +326,7 @@ gvs_fixed_sized_maybe_is_normal (GVarian
value.type_info = g_variant_type_info_element (value.type_info);
value.depth++;
value.ordered_offsets_up_to = 0;
+ value.checked_offsets_up_to = 0;
return g_variant_serialised_is_normal (value);
}
@@ -362,6 +369,7 @@ gvs_variable_sized_maybe_get_child (GVar
value.depth++;
value.ordered_offsets_up_to = 0;
+ value.checked_offsets_up_to = 0;
return value;
}
@@ -392,7 +400,7 @@ gvs_variable_sized_maybe_serialise (GVar
{
if (n_children)
{
- GVariantSerialised child = { NULL, value.data, value.size - 1, value.depth + 1, 0 };
+ GVariantSerialised child = { NULL, value.data, value.size - 1, value.depth + 1, 0, 0 };
/* write the data for the child. */
gvs_filler (&child, children[0]);
@@ -413,6 +421,7 @@ gvs_variable_sized_maybe_is_normal (GVar
value.size--;
value.depth++;
value.ordered_offsets_up_to = 0;
+ value.checked_offsets_up_to = 0;
return g_variant_serialised_is_normal (value);
}
@@ -739,39 +748,46 @@ gvs_variable_sized_array_get_child (GVar
/* If the requested @index_ is beyond the set of indices whose framing offsets
* have been checked, check the remaining offsets to see whether theyre
- * normal (in order, no overlapping array elements). */
- if (index_ > value.ordered_offsets_up_to)
+ * normal (in order, no overlapping array elements).
+ *
+ * Dont bother checking if the highest known-good offset is lower than the
+ * highest checked offset, as that means theres an invalid element at that
+ * index, so theres no need to check further. */
+ if (index_ > value.checked_offsets_up_to &&
+ value.ordered_offsets_up_to == value.checked_offsets_up_to)
{
switch (offsets.offset_size)
{
case 1:
{
value.ordered_offsets_up_to = find_unordered_guint8 (
- offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ offsets.array, value.checked_offsets_up_to, index_ + 1);
break;
}
case 2:
{
value.ordered_offsets_up_to = find_unordered_guint16 (
- offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ offsets.array, value.checked_offsets_up_to, index_ + 1);
break;
}
case 4:
{
value.ordered_offsets_up_to = find_unordered_guint32 (
- offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ offsets.array, value.checked_offsets_up_to, index_ + 1);
break;
}
case 8:
{
value.ordered_offsets_up_to = find_unordered_guint64 (
- offsets.array, value.ordered_offsets_up_to, index_ + 1);
+ offsets.array, value.checked_offsets_up_to, index_ + 1);
break;
}
default:
/* gvs_get_offset_size() only returns maximum 8 */
g_assert_not_reached ();
}
+
+ value.checked_offsets_up_to = index_;
}
if (index_ > value.ordered_offsets_up_to)
@@ -916,6 +932,7 @@ gvs_variable_sized_array_is_normal (GVar
/* All offsets have now been checked. */
value.ordered_offsets_up_to = G_MAXSIZE;
+ value.checked_offsets_up_to = G_MAXSIZE;
return TRUE;
}
@@ -1040,14 +1057,15 @@ gvs_tuple_get_child (GVariantSerialised
* all the tuple *elements* here, not just all the framing offsets, since
* tuples contain a mix of elements which use framing offsets and ones which
* dont. None of them are allowed to overlap. */
- if (index_ > value.ordered_offsets_up_to)
+ if (index_ > value.checked_offsets_up_to &&
+ value.ordered_offsets_up_to == value.checked_offsets_up_to)
{
gsize i, prev_i_end = 0;
- if (value.ordered_offsets_up_to > 0)
- gvs_tuple_get_member_bounds (value, value.ordered_offsets_up_to - 1, offset_size, NULL, &prev_i_end);
+ if (value.checked_offsets_up_to > 0)
+ gvs_tuple_get_member_bounds (value, value.checked_offsets_up_to - 1, offset_size, NULL, &prev_i_end);
- for (i = value.ordered_offsets_up_to; i <= index_; i++)
+ for (i = value.checked_offsets_up_to; i <= index_; i++)
{
gsize i_start, i_end;
@@ -1060,6 +1078,7 @@ gvs_tuple_get_child (GVariantSerialised
}
value.ordered_offsets_up_to = i - 1;
+ value.checked_offsets_up_to = index_;
}
if (index_ > value.ordered_offsets_up_to)
@@ -1257,6 +1276,7 @@ gvs_tuple_is_normal (GVariantSerialised
/* All element bounds have been checked above. */
value.ordered_offsets_up_to = G_MAXSIZE;
+ value.checked_offsets_up_to = G_MAXSIZE;
{
gsize fixed_size;
--- a/glib/gvariant-serialiser.h
+++ b/glib/gvariant-serialiser.h
@@ -41,6 +41,15 @@ typedef struct
* Even when dealing with tuples, @ordered_offsets_up_to is an element index,
* rather than an index into the frame offsets. */
gsize ordered_offsets_up_to;
+
+ /* Similar to @ordered_offsets_up_to. This gives the index of the child element
+ * whose frame offset is the highest in the offset table which has been
+ * checked so far.
+ *
+ * This is always ≥ @ordered_offsets_up_to. It is always an element index.
+ *
+ * See documentation in gvariant-core.c for `struct GVariant` for details. */
+ gsize checked_offsets_up_to;
} GVariantSerialised;
/* deserialization */
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -5998,6 +5998,7 @@ g_variant_byteswap (GVariant *value)
serialised.data = g_malloc (serialised.size);
serialised.depth = g_variant_get_depth (trusted);
serialised.ordered_offsets_up_to = G_MAXSIZE; /* operating on the normal form */
+ serialised.checked_offsets_up_to = G_MAXSIZE;
g_variant_store (trusted, serialised.data);
g_variant_unref (trusted);
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -1282,6 +1282,7 @@ random_instance_filler (GVariantSerialis
serialised->depth = 0;
serialised->ordered_offsets_up_to = 0;
+ serialised->checked_offsets_up_to = 0;
g_assert_true (serialised->type_info == instance->type_info);
g_assert_cmpuint (serialised->size, ==, instance->size);
@@ -1449,6 +1450,7 @@ test_maybe (void)
serialised.size = needed_size;
serialised.depth = 0;
serialised.ordered_offsets_up_to = 0;
+ serialised.checked_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised,
random_instance_filler,
@@ -1573,6 +1575,7 @@ test_array (void)
serialised.size = needed_size;
serialised.depth = 0;
serialised.ordered_offsets_up_to = 0;
+ serialised.checked_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised, random_instance_filler,
(gpointer *) instances, n_children);
@@ -1738,6 +1741,7 @@ test_tuple (void)
serialised.size = needed_size;
serialised.depth = 0;
serialised.ordered_offsets_up_to = 0;
+ serialised.checked_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised, random_instance_filler,
(gpointer *) instances, n_children);
@@ -1835,6 +1839,7 @@ test_variant (void)
serialised.size = needed_size;
serialised.depth = 0;
serialised.ordered_offsets_up_to = 0;
+ serialised.checked_offsets_up_to = 0;
g_variant_serialiser_serialise (serialised, random_instance_filler,
(gpointer *) &instance, 1);

View file

@ -0,0 +1,63 @@
From 8c1a7815e7e6695c120cdedff48395c1222af6d1 Mon Sep 17 00:00:00 2001
From: Philip Withnall <withnall@endlessm.com>
Date: Fri, 12 Jun 2020 18:01:13 +0100
Subject: [PATCH 09/18] tests: Add another test for overlapping offsets in
GVariant
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #2121
---
glib/tests/gvariant.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -5019,6 +5019,38 @@ test_recursion_limits_array_in_variant (
g_variant_unref (wrapper_variant);
}
+/* Test that a nested array with invalid values in its offset table (which point
+ * from the inner to the outer array) is normalised successfully without
+ * looping infinitely. */
+static void
+test_normal_checking_array_offsets_overlapped (void)
+{
+ const guint8 data[] = {
+ 0x01, 0x00,
+ };
+ gsize size = sizeof (data);
+ GVariant *variant = NULL;
+ GVariant *normal_variant = NULL;
+ GVariant *expected_variant = NULL;
+
+ variant = g_variant_new_from_data (G_VARIANT_TYPE ("aay"), data, size,
+ FALSE, NULL, NULL);
+ g_assert_nonnull (variant);
+
+ normal_variant = g_variant_get_normal_form (variant);
+ g_assert_nonnull (normal_variant);
+
+ expected_variant = g_variant_new_parsed ("[@ay [], []]");
+ g_assert_cmpvariant (normal_variant, expected_variant);
+
+ g_assert_cmpmem (g_variant_get_data (normal_variant), g_variant_get_size (normal_variant),
+ g_variant_get_data (expected_variant), g_variant_get_size (expected_variant));
+
+ g_variant_unref (expected_variant);
+ g_variant_unref (normal_variant);
+ g_variant_unref (variant);
+}
+
/* Test that an array with invalidly large values in its offset table is
* normalised successfully without looping infinitely. */
static void
@@ -5418,6 +5450,8 @@ main (int argc, char **argv)
g_test_add_func ("/gvariant/normal-checking/tuples",
test_normal_checking_tuples);
+ g_test_add_func ("/gvariant/normal-checking/array-offsets/overlapped",
+ test_normal_checking_array_offsets_overlapped);
g_test_add_func ("/gvariant/normal-checking/array-offsets",
test_normal_checking_array_offsets);
g_test_add_func ("/gvariant/normal-checking/array-offsets2",

View file

@ -0,0 +1,71 @@
From 019505a7ccc32d0afa06e104dc0ac2e63e6f7189 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Mon, 24 Oct 2022 16:43:23 +0100
Subject: [PATCH 10/18] tests: Disable some random instance tests of GVariants
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Building a `GVariant` using entirely random data may result in a
non-normally-formed `GVariant`. Its always possible to read these
`GVariant`s, but the API might return default values for some or all of
their components.
In particular, this can easily happen when randomly generating the
offset tables for non-fixed-width container types.
If it does happen, bytewise comparison of the parsed `GVariant` with the
original bytes will not always match. So skip those checks.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2121
---
glib/tests/gvariant.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -1229,6 +1229,7 @@ random_instance_assert (RandomInstance *
GRand *rand;
gsize i;
+ g_assert_true (size == 0 || buffer != NULL);
g_assert_cmpint ((gsize) buffer & ALIGN_BITS & instance->alignment, ==, 0);
g_assert_cmpint (size, ==, instance->size);
@@ -1455,10 +1456,13 @@ test_maybe (void)
g_variant_serialiser_serialise (serialised,
random_instance_filler,
(gpointer *) &instance, 1);
+
child = g_variant_serialised_get_child (serialised, 0);
g_assert_true (child.type_info == instance->type_info);
- random_instance_assert (instance, child.data, child.size);
+ if (child.data != NULL) /* could be NULL if element is non-normal */
+ random_instance_assert (instance, child.data, child.size);
g_variant_type_info_unref (child.type_info);
+
flavoured_free (serialised.data, flavour);
}
}
@@ -1591,7 +1595,8 @@ test_array (void)
child = g_variant_serialised_get_child (serialised, i);
g_assert_true (child.type_info == instances[i]->type_info);
- random_instance_assert (instances[i], child.data, child.size);
+ if (child.data != NULL) /* could be NULL if element is non-normal */
+ random_instance_assert (instances[i], child.data, child.size);
g_variant_type_info_unref (child.type_info);
}
@@ -1757,7 +1762,8 @@ test_tuple (void)
child = g_variant_serialised_get_child (serialised, i);
g_assert_true (child.type_info == instances[i]->type_info);
- random_instance_assert (instances[i], child.data, child.size);
+ if (child.data != NULL) /* could be NULL if element is non-normal */
+ random_instance_assert (instances[i], child.data, child.size);
g_variant_type_info_unref (child.type_info);
}

View file

@ -0,0 +1,26 @@
From 9d2a142807806212a23436d0332b0209733810f2 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Mon, 24 Oct 2022 18:14:57 +0100
Subject: [PATCH 11/18] gvariant: Clarify the docs for
g_variant_get_normal_form()
Document how non-normal parts of the `GVariant` are handled.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
---
glib/gvariant.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -5923,7 +5923,9 @@ g_variant_deep_copy (GVariant *value)
* marked as trusted and a new reference to it is returned.
*
* If @value is found not to be in normal form then a new trusted
- * #GVariant is created with the same value as @value.
+ * #GVariant is created with the same value as @value. The non-normal parts of
+ * @value will be replaced with default values which are guaranteed to be in
+ * normal form.
*
* It makes sense to call this function if you've received #GVariant
* data from untrusted sources and you want to ensure your serialized

View file

@ -0,0 +1,40 @@
From b0ccb1616688290088e49dea2dc0d7fe723136e4 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Mon, 24 Oct 2022 18:43:55 +0100
Subject: [PATCH 12/18] gvariant: Port g_variant_deep_copy() to count its
iterations directly
This is equivalent to what `GVariantIter` does, but it means that
`g_variant_deep_copy()` is making its own `g_variant_get_child_value()`
calls.
This will be useful in an upcoming commit, where those child values will
be inspected a little more deeply.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2121
---
glib/gvariant.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -5850,14 +5850,13 @@ g_variant_deep_copy (GVariant *value)
case G_VARIANT_CLASS_VARIANT:
{
GVariantBuilder builder;
- GVariantIter iter;
- GVariant *child;
+ gsize i, n_children;
g_variant_builder_init (&builder, g_variant_get_type (value));
- g_variant_iter_init (&iter, value);
- while ((child = g_variant_iter_next_value (&iter)))
+ for (i = 0, n_children = g_variant_n_children (value); i < n_children; i++)
{
+ GVariant *child = g_variant_get_child_value (value, i);
g_variant_builder_add_value (&builder, g_variant_deep_copy (child));
g_variant_unref (child);
}

View file

@ -0,0 +1,105 @@
Backport of:
From 1770e255ae6cc3f0bf5312322432bbc6524a3632 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Tue, 25 Oct 2022 13:03:22 +0100
Subject: [PATCH 13/18] gvariant: Add internal
g_variant_maybe_get_child_value()
This will be used in a following commit.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2540
---
glib/gvariant-core.c | 68 ++++++++++++++++++++++++++++++++++++++++++++
glib/gvariant-core.h | 3 ++
2 files changed, 71 insertions(+)
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -1203,6 +1203,74 @@ g_variant_get_child_value (GVariant *val
}
/**
+ * g_variant_maybe_get_child_value:
+ * @value: a container #GVariant
+ * @index_: the index of the child to fetch
+ *
+ * Reads a child item out of a container #GVariant instance, if it is in normal
+ * form. If it is not in normal form, return %NULL.
+ *
+ * This function behaves the same as g_variant_get_child_value(), except that it
+ * returns %NULL if the child is not in normal form. g_variant_get_child_value()
+ * would instead return a new default value of the correct type.
+ *
+ * This is intended to be used internally to avoid unnecessary #GVariant
+ * allocations.
+ *
+ * The returned value is never floating. You should free it with
+ * g_variant_unref() when you're done with it.
+ *
+ * This function is O(1).
+ *
+ * Returns: (transfer full): the child at the specified index
+ *
+ * Since: 2.72
+ */
+GVariant *
+g_variant_maybe_get_child_value (GVariant *value,
+ gsize index_)
+{
+ g_return_val_if_fail (index_ < g_variant_n_children (value), NULL);
+ g_return_val_if_fail (value->depth < G_MAXSIZE, NULL);
+
+ if (~g_atomic_int_get (&value->state) & STATE_SERIALISED)
+ {
+ g_variant_lock (value);
+
+ if (~value->state & STATE_SERIALISED)
+ {
+ GVariant *child;
+
+ child = g_variant_ref (value->contents.tree.children[index_]);
+ g_variant_unlock (value);
+
+ return child;
+ }
+
+ g_variant_unlock (value);
+ }
+
+ {
+ GVariantSerialised serialised = g_variant_to_serialised (value);
+ GVariantSerialised s_child;
+
+ /* get the serializer to extract the serialized data for the child
+ * from the serialized data for the container
+ */
+ s_child = g_variant_serialised_get_child (serialised, index_);
+
+ if (!(value->state & STATE_TRUSTED) && s_child.data == NULL)
+ {
+ g_variant_type_info_unref (s_child.type_info);
+ return NULL;
+ }
+
+ g_variant_type_info_unref (s_child.type_info);
+ return g_variant_get_child_value (value, index_);
+ }
+}
+
+/**
* g_variant_store:
* @value: the #GVariant to store
* @data: (not nullable): the location to store the serialized data at
--- a/glib/gvariant-core.h
+++ b/glib/gvariant-core.h
@@ -36,4 +36,7 @@ GVariantTypeInfo * g_variant_get_ty
gsize g_variant_get_depth (GVariant *value);
+GVariant * g_variant_maybe_get_child_value (GVariant *value,
+ gsize index_);
+
#endif /* __G_VARIANT_CORE_H__ */

View file

@ -0,0 +1,125 @@
From 82fc15af4c84a2645343c51b18ab3528c51790ab Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Tue, 25 Oct 2022 13:03:45 +0100
Subject: [PATCH 14/18] gvariant: Cut allocs of default values for children of
non-normal arrays
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This improves a slow case in `g_variant_get_normal_form()` where
allocating many identical default values for the children of a
variable-sized array which has a malformed offset table would take a lot
of time.
The fix is to make all child values after the first invalid one be
references to the default value emitted for the first invalid one,
rather than identical new `GVariant`s.
In particular, this fixes a case where an attacker could create an array
of length L of very large tuples of size T each, corrupt the offset table
so they dont have to specify the array content, and then induce
`g_variant_get_normal_form()` into allocating L×T default values from an
input which is significantly smaller than L×T in length.
A pre-existing workaround for this issue is for code to call
`g_variant_is_normal_form()` before calling
`g_variant_get_normal_form()`, and to skip the latter call if the former
returns false. This commit improves the behaviour in the case that
`g_variant_get_normal_form()` is called anyway.
This fix changes the time to run the `fuzz_variant_binary` test on the
testcase from oss-fuzz#19777 from >60s (before being terminated) with
2.3GB of memory usage and 580k page faults; to 32s, 8.3MB of memory
usage and 1500 page faults (as measured by `time -v`).
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: #2540
oss-fuzz#19777
---
glib/gvariant.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 65 insertions(+), 1 deletion(-)
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -5844,7 +5844,6 @@ g_variant_deep_copy (GVariant *value)
switch (g_variant_classify (value))
{
case G_VARIANT_CLASS_MAYBE:
- case G_VARIANT_CLASS_ARRAY:
case G_VARIANT_CLASS_TUPLE:
case G_VARIANT_CLASS_DICT_ENTRY:
case G_VARIANT_CLASS_VARIANT:
@@ -5863,6 +5862,71 @@ g_variant_deep_copy (GVariant *value)
return g_variant_builder_end (&builder);
}
+
+ case G_VARIANT_CLASS_ARRAY:
+ {
+ GVariantBuilder builder;
+ gsize i, n_children;
+ GVariant *first_invalid_child_deep_copy = NULL;
+
+ /* Arrays are in theory treated the same as maybes, tuples, dict entries
+ * and variants, and could be another case in the above block of code.
+ *
+ * However, they have the property that when dealing with non-normal
+ * data (which is the only time g_variant_deep_copy() is currently
+ * called) in a variable-sized array, the code above can easily end up
+ * creating many default child values in order to return an array which
+ * is of the right length and type, but without containing non-normal
+ * data. This can happen if the offset table for the array is malformed.
+ *
+ * In this case, the code above would end up allocating the same default
+ * value for each one of the child indexes beyond the first malformed
+ * entry in the offset table. This can end up being a lot of identical
+ * allocations of default values, particularly if the non-normal array
+ * is crafted maliciously.
+ *
+ * Avoid that problem by returning a new reference to the same default
+ * value for every child after the first invalid one. This results in
+ * returning an equivalent array, in normal form and trusted — but with
+ * significantly fewer memory allocations.
+ *
+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2540 */
+
+ g_variant_builder_init (&builder, g_variant_get_type (value));
+
+ for (i = 0, n_children = g_variant_n_children (value); i < n_children; i++)
+ {
+ /* Try maybe_get_child_value() first; if it returns NULL, this child
+ * is non-normal. get_child_value() would have constructed and
+ * returned a default value in that case. */
+ GVariant *child = g_variant_maybe_get_child_value (value, i);
+
+ if (child != NULL)
+ {
+ /* Non-normal children may not always be contiguous, as they may
+ * be non-normal for reasons other than invalid offset table
+ * entries. As they are all the same type, they will all have
+ * the same default value though, so keep that around. */
+ g_variant_builder_add_value (&builder, g_variant_deep_copy (child));
+ }
+ else if (child == NULL && first_invalid_child_deep_copy != NULL)
+ {
+ g_variant_builder_add_value (&builder, first_invalid_child_deep_copy);
+ }
+ else if (child == NULL)
+ {
+ child = g_variant_get_child_value (value, i);
+ first_invalid_child_deep_copy = g_variant_ref_sink (g_variant_deep_copy (child));
+ g_variant_builder_add_value (&builder, first_invalid_child_deep_copy);
+ }
+
+ g_clear_pointer (&child, g_variant_unref);
+ }
+
+ g_clear_pointer (&first_invalid_child_deep_copy, g_variant_unref);
+
+ return g_variant_builder_end (&builder);
+ }
case G_VARIANT_CLASS_BOOLEAN:
return g_variant_new_boolean (g_variant_get_boolean (value));

View file

@ -0,0 +1,21 @@
From 935f1c200789c76ad5b51b1f403f611e3cc75318 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Tue, 25 Oct 2022 18:03:56 +0100
Subject: [PATCH 15/18] gvariant: Fix a leak of a GVariantTypeInfo on an error
handling path
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
---
glib/gvariant-core.c | 1 +
1 file changed, 1 insertion(+)
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -1181,6 +1181,7 @@ g_variant_get_child_value (GVariant *val
G_VARIANT_MAX_RECURSION_DEPTH - value->depth)
{
g_assert (g_variant_is_of_type (value, G_VARIANT_TYPE_VARIANT));
+ g_variant_type_info_unref (s_child.type_info);
return g_variant_new_tuple (NULL, 0);
}

View file

@ -0,0 +1,280 @@
From f1dfc5d0c5c0486b5fccb2ceddf1db1162c7033c Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 27 Oct 2022 12:00:04 +0100
Subject: [PATCH 16/18] gvariant-serialiser: Check offset table entry size is
minimal
The entries in an offset table (which is used for variable sized arrays
and tuples containing variable sized members) are sized so that they can
address every byte in the overall variant.
The specification requires that for a variant to be in normal form, its
offset table entries must be the minimum width such that they can
address every byte in the variant.
That minimality requirement was not checked in
`g_variant_is_normal_form()`, leading to two different byte arrays being
interpreted as the normal form of a given variant tree. That kind of
confusion could potentially be exploited, and is certainly a bug.
Fix it by adding the necessary checks on offset table entry width, and
unit tests.
Spotted by William Manley.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: #2794
---
glib/gvariant-serialiser.c | 19 +++-
glib/tests/gvariant.c | 176 +++++++++++++++++++++++++++++++++++++
2 files changed, 194 insertions(+), 1 deletion(-)
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -694,6 +694,10 @@ gvs_variable_sized_array_get_frame_offse
out.data_size = last_end;
out.array = value.data + last_end;
out.length = offsets_array_size / out.offset_size;
+
+ if (out.length > 0 && gvs_calculate_total_size (last_end, out.length) != value.size)
+ return out; /* offset size not minimal */
+
out.is_normal = TRUE;
return out;
@@ -1201,6 +1205,7 @@ gvs_tuple_is_normal (GVariantSerialised
gsize length;
gsize offset;
gsize i;
+ gsize offset_table_size;
/* as per the comment in gvs_tuple_get_child() */
if G_UNLIKELY (value.data == NULL && value.size != 0)
@@ -1305,7 +1310,19 @@ gvs_tuple_is_normal (GVariantSerialised
}
}
- return offset_ptr == offset;
+ /* @offset_ptr has been counting backwards from the end of the variant, to
+ * find the beginning of the offset table. @offset has been counting forwards
+ * from the beginning of the variant to find the end of the data. They should
+ * have met in the middle. */
+ if (offset_ptr != offset)
+ return FALSE;
+
+ offset_table_size = value.size - offset_ptr;
+ if (value.size > 0 &&
+ gvs_calculate_total_size (offset, offset_table_size / offset_size) != value.size)
+ return FALSE; /* offset size not minimal */
+
+ return TRUE;
}
/* Variants {{{2
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -5122,6 +5122,86 @@ test_normal_checking_array_offsets2 (voi
g_variant_unref (variant);
}
+/* Test that an otherwise-valid serialised GVariant is considered non-normal if
+ * its offset table entries are too wide.
+ *
+ * See §2.3.6 (Framing Offsets) of the GVariant specification. */
+static void
+test_normal_checking_array_offsets_minimal_sized (void)
+{
+ GVariantBuilder builder;
+ gsize i;
+ GVariant *aay_constructed = NULL;
+ const guint8 *data = NULL;
+ guint8 *data_owned = NULL;
+ GVariant *aay_deserialised = NULL;
+ GVariant *aay_normalised = NULL;
+
+ /* Construct an array of type aay, consisting of 128 elements which are each
+ * an empty array, i.e. `[[] * 128]`. This is chosen because the inner
+ * elements are variable sized (making the outer array variable sized, so it
+ * must have an offset table), but they are also zero-sized when serialised.
+ * So the serialised representation of @aay_constructed consists entirely of
+ * its offset table, which is entirely zeroes.
+ *
+ * The array is chosen to be 128 elements long because that means offset
+ * table entries which are 1 byte long. If the elements in the array were
+ * non-zero-sized (to the extent that the overall array is ≥256 bytes long),
+ * the offset table entries would end up being 2 bytes long. */
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aay"));
+
+ for (i = 0; i < 128; i++)
+ g_variant_builder_add_value (&builder, g_variant_new_array (G_VARIANT_TYPE_BYTE, NULL, 0));
+
+ aay_constructed = g_variant_builder_end (&builder);
+
+ /* Verify that the constructed array is in normal form, and its serialised
+ * form is `b'\0' * 128`. */
+ g_assert_true (g_variant_is_normal_form (aay_constructed));
+ g_assert_cmpuint (g_variant_n_children (aay_constructed), ==, 128);
+ g_assert_cmpuint (g_variant_get_size (aay_constructed), ==, 128);
+
+ data = g_variant_get_data (aay_constructed);
+ for (i = 0; i < g_variant_get_size (aay_constructed); i++)
+ g_assert_cmpuint (data[i], ==, 0);
+
+ /* Construct a serialised `aay` GVariant which is `b'\0' * 256`. This has to
+ * be a non-normal form of `[[] * 128]`, with 2-byte-long offset table
+ * entries, because each offset table entry has to be able to reference all of
+ * the byte boundaries in the container. All the entries in the offset table
+ * are zero, so all the elements of the array are zero-sized. */
+ data = data_owned = g_malloc0 (256);
+ aay_deserialised = g_variant_new_from_data (G_VARIANT_TYPE ("aay"),
+ data,
+ 256,
+ FALSE,
+ g_free,
+ g_steal_pointer (&data_owned));
+
+ g_assert_false (g_variant_is_normal_form (aay_deserialised));
+ g_assert_cmpuint (g_variant_n_children (aay_deserialised), ==, 128);
+ g_assert_cmpuint (g_variant_get_size (aay_deserialised), ==, 256);
+
+ data = g_variant_get_data (aay_deserialised);
+ for (i = 0; i < g_variant_get_size (aay_deserialised); i++)
+ g_assert_cmpuint (data[i], ==, 0);
+
+ /* Get its normal form. That should change the serialised size. */
+ aay_normalised = g_variant_get_normal_form (aay_deserialised);
+
+ g_assert_true (g_variant_is_normal_form (aay_normalised));
+ g_assert_cmpuint (g_variant_n_children (aay_normalised), ==, 128);
+ g_assert_cmpuint (g_variant_get_size (aay_normalised), ==, 128);
+
+ data = g_variant_get_data (aay_normalised);
+ for (i = 0; i < g_variant_get_size (aay_normalised); i++)
+ g_assert_cmpuint (data[i], ==, 0);
+
+ g_variant_unref (aay_normalised);
+ g_variant_unref (aay_deserialised);
+ g_variant_unref (aay_constructed);
+}
+
/* Test that a tuple with invalidly large values in its offset table is
* normalised successfully without looping infinitely. */
static void
@@ -5316,6 +5396,98 @@ test_normal_checking_tuple_offsets4 (voi
g_variant_unref (variant);
}
+/* Test that an otherwise-valid serialised GVariant is considered non-normal if
+ * its offset table entries are too wide.
+ *
+ * See §2.3.6 (Framing Offsets) of the GVariant specification. */
+static void
+test_normal_checking_tuple_offsets_minimal_sized (void)
+{
+ GString *type_string = NULL;
+ GVariantBuilder builder;
+ gsize i;
+ GVariant *ray_constructed = NULL;
+ const guint8 *data = NULL;
+ guint8 *data_owned = NULL;
+ GVariant *ray_deserialised = NULL;
+ GVariant *ray_normalised = NULL;
+
+ /* Construct a tuple of type (ay…ay), consisting of 129 members which are each
+ * an empty array, i.e. `([] * 129)`. This is chosen because the inner
+ * members are variable sized, so the outer tuple must have an offset table,
+ * but they are also zero-sized when serialised. So the serialised
+ * representation of @ray_constructed consists entirely of its offset table,
+ * which is entirely zeroes.
+ *
+ * The tuple is chosen to be 129 members long because that means it has 128
+ * offset table entries which are 1 byte long each. If the members in the
+ * tuple were non-zero-sized (to the extent that the overall tuple is ≥256
+ * bytes long), the offset table entries would end up being 2 bytes long.
+ *
+ * 129 members are used unlike 128 array elements in
+ * test_normal_checking_array_offsets_minimal_sized(), because the last member
+ * in a tuple never needs an offset table entry. */
+ type_string = g_string_new ("");
+ g_string_append_c (type_string, '(');
+ for (i = 0; i < 129; i++)
+ g_string_append (type_string, "ay");
+ g_string_append_c (type_string, ')');
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE (type_string->str));
+
+ for (i = 0; i < 129; i++)
+ g_variant_builder_add_value (&builder, g_variant_new_array (G_VARIANT_TYPE_BYTE, NULL, 0));
+
+ ray_constructed = g_variant_builder_end (&builder);
+
+ /* Verify that the constructed tuple is in normal form, and its serialised
+ * form is `b'\0' * 128`. */
+ g_assert_true (g_variant_is_normal_form (ray_constructed));
+ g_assert_cmpuint (g_variant_n_children (ray_constructed), ==, 129);
+ g_assert_cmpuint (g_variant_get_size (ray_constructed), ==, 128);
+
+ data = g_variant_get_data (ray_constructed);
+ for (i = 0; i < g_variant_get_size (ray_constructed); i++)
+ g_assert_cmpuint (data[i], ==, 0);
+
+ /* Construct a serialised `(ay…ay)` GVariant which is `b'\0' * 256`. This has
+ * to be a non-normal form of `([] * 129)`, with 2-byte-long offset table
+ * entries, because each offset table entry has to be able to reference all of
+ * the byte boundaries in the container. All the entries in the offset table
+ * are zero, so all the members of the tuple are zero-sized. */
+ data = data_owned = g_malloc0 (256);
+ ray_deserialised = g_variant_new_from_data (G_VARIANT_TYPE (type_string->str),
+ data,
+ 256,
+ FALSE,
+ g_free,
+ g_steal_pointer (&data_owned));
+
+ g_assert_false (g_variant_is_normal_form (ray_deserialised));
+ g_assert_cmpuint (g_variant_n_children (ray_deserialised), ==, 129);
+ g_assert_cmpuint (g_variant_get_size (ray_deserialised), ==, 256);
+
+ data = g_variant_get_data (ray_deserialised);
+ for (i = 0; i < g_variant_get_size (ray_deserialised); i++)
+ g_assert_cmpuint (data[i], ==, 0);
+
+ /* Get its normal form. That should change the serialised size. */
+ ray_normalised = g_variant_get_normal_form (ray_deserialised);
+
+ g_assert_true (g_variant_is_normal_form (ray_normalised));
+ g_assert_cmpuint (g_variant_n_children (ray_normalised), ==, 129);
+ g_assert_cmpuint (g_variant_get_size (ray_normalised), ==, 128);
+
+ data = g_variant_get_data (ray_normalised);
+ for (i = 0; i < g_variant_get_size (ray_normalised); i++)
+ g_assert_cmpuint (data[i], ==, 0);
+
+ g_variant_unref (ray_normalised);
+ g_variant_unref (ray_deserialised);
+ g_variant_unref (ray_constructed);
+ g_string_free (type_string, TRUE);
+}
+
/* Test that an empty object path is normalised successfully to the base object
* path, /. */
static void
@@ -5462,6 +5634,8 @@ main (int argc, char **argv)
test_normal_checking_array_offsets);
g_test_add_func ("/gvariant/normal-checking/array-offsets2",
test_normal_checking_array_offsets2);
+ g_test_add_func ("/gvariant/normal-checking/array-offsets/minimal-sized",
+ test_normal_checking_array_offsets_minimal_sized);
g_test_add_func ("/gvariant/normal-checking/tuple-offsets",
test_normal_checking_tuple_offsets);
g_test_add_func ("/gvariant/normal-checking/tuple-offsets2",
@@ -5470,6 +5644,8 @@ main (int argc, char **argv)
test_normal_checking_tuple_offsets3);
g_test_add_func ("/gvariant/normal-checking/tuple-offsets4",
test_normal_checking_tuple_offsets4);
+ g_test_add_func ("/gvariant/normal-checking/tuple-offsets/minimal-sized",
+ test_normal_checking_tuple_offsets_minimal_sized);
g_test_add_func ("/gvariant/normal-checking/empty-object-path",
test_normal_checking_empty_object_path);

View file

@ -0,0 +1,89 @@
From 781f05a22ef11d8a2177b4e9078978decec36dd0 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 27 Oct 2022 16:13:54 +0100
Subject: [PATCH 17/18] gvariant: Fix g_variant_byteswap() returning non-normal
data sometimes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
If `g_variant_byteswap()` was called on a non-normal variant of a type
which doesnt need byteswapping, it would return a non-normal output.
That contradicts the documentation, which says that the return value is
always in normal form.
Fix the code so it matches the documentation.
Includes a unit test.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2797
---
glib/gvariant.c | 8 +++++---
glib/tests/gvariant.c | 24 ++++++++++++++++++++++++
2 files changed, 29 insertions(+), 3 deletions(-)
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -6070,14 +6070,16 @@ g_variant_byteswap (GVariant *value)
g_variant_serialised_byteswap (serialised);
bytes = g_bytes_new_take (serialised.data, serialised.size);
- new = g_variant_new_from_bytes (g_variant_get_type (value), bytes, TRUE);
+ new = g_variant_ref_sink (g_variant_new_from_bytes (g_variant_get_type (value), bytes, TRUE));
g_bytes_unref (bytes);
}
else
/* contains no multi-byte data */
- new = value;
+ new = g_variant_get_normal_form (value);
- return g_variant_ref_sink (new);
+ g_assert (g_variant_is_trusted (new));
+
+ return g_steal_pointer (&new);
}
/**
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -3833,6 +3833,29 @@ test_gv_byteswap (void)
}
static void
+test_gv_byteswap_non_normal_non_aligned (void)
+{
+ const guint8 data[] = { 0x02 };
+ GVariant *v = NULL;
+ GVariant *v_byteswapped = NULL;
+
+ g_test_summary ("Test that calling g_variant_byteswap() on a variant which "
+ "is in non-normal form and doesnt need byteswapping returns "
+ "the same variant in normal form.");
+
+ v = g_variant_new_from_data (G_VARIANT_TYPE_BOOLEAN, data, sizeof (data), FALSE, NULL, NULL);
+ g_assert_false (g_variant_is_normal_form (v));
+
+ v_byteswapped = g_variant_byteswap (v);
+ g_assert_true (g_variant_is_normal_form (v_byteswapped));
+
+ g_assert_cmpvariant (v, v_byteswapped);
+
+ g_variant_unref (v);
+ g_variant_unref (v_byteswapped);
+}
+
+static void
test_parser (void)
{
TreeInstance *tree;
@@ -5599,6 +5622,7 @@ main (int argc, char **argv)
g_test_add_func ("/gvariant/builder-memory", test_builder_memory);
g_test_add_func ("/gvariant/hashing", test_hashing);
g_test_add_func ("/gvariant/byteswap", test_gv_byteswap);
+ g_test_add_func ("/gvariant/byteswap/non-normal-non-aligned", test_gv_byteswap_non_normal_non_aligned);
g_test_add_func ("/gvariant/parser", test_parses);
g_test_add_func ("/gvariant/parser/integer-bounds", test_parser_integer_bounds);
g_test_add_func ("/gvariant/parser/recursion", test_parser_recursion);

View file

@ -0,0 +1,290 @@
From 7d7efce1d9c379fdd7d2ff58caea88f8806fdd2e Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 27 Oct 2022 22:53:13 +0100
Subject: [PATCH 18/18] gvariant: Allow g_variant_byteswap() to operate on
tree-form variants
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This avoids needing to always serialise a variant before byteswapping it.
With variants in non-normal forms, serialisation can result in a large
increase in size of the variant, and a lot of allocations for leaf
`GVariant`s. This can lead to a denial of service attack.
Avoid that by changing byteswapping so that it happens on the tree form
of the variant if the input is in non-normal form. If the input is in
normal form (either serialised or in tree form), continue using the
existing code as byteswapping an already-serialised normal variant is
about 3× faster than byteswapping on the equivalent tree form.
The existing unit tests cover byteswapping well, but need some
adaptation so that they operate on tree form variants too.
I considered dropping the serialised byteswapping code and doing all
byteswapping on tree-form variants, as that would make maintenance
simpler (avoiding having two parallel implementations of byteswapping).
However, most inputs to `g_variant_byteswap()` are likely to be
serialised variants (coming from a byte array of input from some foreign
source) and most of them are going to be in normal form (as corruption
and malicious action are rare). So getting rid of the serialised
byteswapping code would impose quite a performance penalty on the common
case.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: #2797
---
glib/gvariant.c | 87 ++++++++++++++++++++++++++++++++-----------
glib/tests/gvariant.c | 57 ++++++++++++++++++++++++----
2 files changed, 115 insertions(+), 29 deletions(-)
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -5839,7 +5839,8 @@ g_variant_iter_loop (GVariantIter *iter,
/* Serialized data {{{1 */
static GVariant *
-g_variant_deep_copy (GVariant *value)
+g_variant_deep_copy (GVariant *value,
+ gboolean byteswap)
{
switch (g_variant_classify (value))
{
@@ -5856,7 +5857,7 @@ g_variant_deep_copy (GVariant *value)
for (i = 0, n_children = g_variant_n_children (value); i < n_children; i++)
{
GVariant *child = g_variant_get_child_value (value, i);
- g_variant_builder_add_value (&builder, g_variant_deep_copy (child));
+ g_variant_builder_add_value (&builder, g_variant_deep_copy (child, byteswap));
g_variant_unref (child);
}
@@ -5907,7 +5908,7 @@ g_variant_deep_copy (GVariant *value)
* be non-normal for reasons other than invalid offset table
* entries. As they are all the same type, they will all have
* the same default value though, so keep that around. */
- g_variant_builder_add_value (&builder, g_variant_deep_copy (child));
+ g_variant_builder_add_value (&builder, g_variant_deep_copy (child, byteswap));
}
else if (child == NULL && first_invalid_child_deep_copy != NULL)
{
@@ -5916,7 +5917,7 @@ g_variant_deep_copy (GVariant *value)
else if (child == NULL)
{
child = g_variant_get_child_value (value, i);
- first_invalid_child_deep_copy = g_variant_ref_sink (g_variant_deep_copy (child));
+ first_invalid_child_deep_copy = g_variant_ref_sink (g_variant_deep_copy (child, byteswap));
g_variant_builder_add_value (&builder, first_invalid_child_deep_copy);
}
@@ -5935,28 +5936,63 @@ g_variant_deep_copy (GVariant *value)
return g_variant_new_byte (g_variant_get_byte (value));
case G_VARIANT_CLASS_INT16:
- return g_variant_new_int16 (g_variant_get_int16 (value));
+ if (byteswap)
+ return g_variant_new_int16 (GUINT16_SWAP_LE_BE (g_variant_get_int16 (value)));
+ else
+ return g_variant_new_int16 (g_variant_get_int16 (value));
case G_VARIANT_CLASS_UINT16:
- return g_variant_new_uint16 (g_variant_get_uint16 (value));
+ if (byteswap)
+ return g_variant_new_uint16 (GUINT16_SWAP_LE_BE (g_variant_get_uint16 (value)));
+ else
+ return g_variant_new_uint16 (g_variant_get_uint16 (value));
case G_VARIANT_CLASS_INT32:
- return g_variant_new_int32 (g_variant_get_int32 (value));
+ if (byteswap)
+ return g_variant_new_int32 (GUINT32_SWAP_LE_BE (g_variant_get_int32 (value)));
+ else
+ return g_variant_new_int32 (g_variant_get_int32 (value));
case G_VARIANT_CLASS_UINT32:
- return g_variant_new_uint32 (g_variant_get_uint32 (value));
+ if (byteswap)
+ return g_variant_new_uint32 (GUINT32_SWAP_LE_BE (g_variant_get_uint32 (value)));
+ else
+ return g_variant_new_uint32 (g_variant_get_uint32 (value));
case G_VARIANT_CLASS_INT64:
- return g_variant_new_int64 (g_variant_get_int64 (value));
+ if (byteswap)
+ return g_variant_new_int64 (GUINT64_SWAP_LE_BE (g_variant_get_int64 (value)));
+ else
+ return g_variant_new_int64 (g_variant_get_int64 (value));
case G_VARIANT_CLASS_UINT64:
- return g_variant_new_uint64 (g_variant_get_uint64 (value));
+ if (byteswap)
+ return g_variant_new_uint64 (GUINT64_SWAP_LE_BE (g_variant_get_uint64 (value)));
+ else
+ return g_variant_new_uint64 (g_variant_get_uint64 (value));
case G_VARIANT_CLASS_HANDLE:
- return g_variant_new_handle (g_variant_get_handle (value));
+ if (byteswap)
+ return g_variant_new_handle (GUINT32_SWAP_LE_BE (g_variant_get_handle (value)));
+ else
+ return g_variant_new_handle (g_variant_get_handle (value));
case G_VARIANT_CLASS_DOUBLE:
- return g_variant_new_double (g_variant_get_double (value));
+ if (byteswap)
+ {
+ /* We have to convert the double to a uint64 here using a union,
+ * because a cast will round it numerically. */
+ union
+ {
+ guint64 u64;
+ gdouble dbl;
+ } u1, u2;
+ u1.dbl = g_variant_get_double (value);
+ u2.u64 = GUINT64_SWAP_LE_BE (u1.u64);
+ return g_variant_new_double (u2.dbl);
+ }
+ else
+ return g_variant_new_double (g_variant_get_double (value));
case G_VARIANT_CLASS_STRING:
return g_variant_new_string (g_variant_get_string (value, NULL));
@@ -6013,7 +6049,7 @@ g_variant_get_normal_form (GVariant *val
if (g_variant_is_normal_form (value))
return g_variant_ref (value);
- trusted = g_variant_deep_copy (value);
+ trusted = g_variant_deep_copy (value, FALSE);
g_assert (g_variant_is_trusted (trusted));
return g_variant_ref_sink (trusted);
@@ -6033,6 +6069,11 @@ g_variant_get_normal_form (GVariant *val
* contain multi-byte numeric data. That include strings, booleans,
* bytes and containers containing only these things (recursively).
*
+ * While this function can safely handle untrusted, non-normal data, it is
+ * recommended to check whether the input is in normal form beforehand, using
+ * g_variant_is_normal_form(), and to reject non-normal inputs if your
+ * application can be strict about what inputs it rejects.
+ *
* The returned value is always in normal form and is marked as trusted.
*
* Returns: (transfer full): the byteswapped form of @value
@@ -6050,22 +6091,21 @@ g_variant_byteswap (GVariant *value)
g_variant_type_info_query (type_info, &alignment, NULL);
- if (alignment)
- /* (potentially) contains multi-byte numeric data */
+ if (alignment && g_variant_is_normal_form (value))
{
+ /* (potentially) contains multi-byte numeric data, but is also already in
+ * normal form so we can use a faster byteswapping codepath on the
+ * serialised data */
GVariantSerialised serialised = { 0, };
- GVariant *trusted;
GBytes *bytes;
- trusted = g_variant_get_normal_form (value);
- serialised.type_info = g_variant_get_type_info (trusted);
- serialised.size = g_variant_get_size (trusted);
+ serialised.type_info = g_variant_get_type_info (value);
+ serialised.size = g_variant_get_size (value);
serialised.data = g_malloc (serialised.size);
- serialised.depth = g_variant_get_depth (trusted);
+ serialised.depth = g_variant_get_depth (value);
serialised.ordered_offsets_up_to = G_MAXSIZE; /* operating on the normal form */
serialised.checked_offsets_up_to = G_MAXSIZE;
- g_variant_store (trusted, serialised.data);
- g_variant_unref (trusted);
+ g_variant_store (value, serialised.data);
g_variant_serialised_byteswap (serialised);
@@ -6073,6 +6113,9 @@ g_variant_byteswap (GVariant *value)
new = g_variant_ref_sink (g_variant_new_from_bytes (g_variant_get_type (value), bytes, TRUE));
g_bytes_unref (bytes);
}
+ else if (alignment)
+ /* (potentially) contains multi-byte numeric data */
+ new = g_variant_ref_sink (g_variant_deep_copy (value, TRUE));
else
/* contains no multi-byte data */
new = g_variant_get_normal_form (value);
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -2286,24 +2286,67 @@ serialise_tree (TreeInstance *tree
static void
test_byteswap (void)
{
- GVariantSerialised one = { 0, }, two = { 0, };
+ GVariantSerialised one = { 0, }, two = { 0, }, three = { 0, };
TreeInstance *tree;
+ GVariant *one_variant = NULL;
+ GVariant *two_variant = NULL;
+ GVariant *two_byteswapped = NULL;
+ GVariant *three_variant = NULL;
+ GVariant *three_byteswapped = NULL;
+ guint8 *three_data_copy = NULL;
+ gsize three_size_copy = 0;
+ /* Write a tree out twice, once normally and once byteswapped. */
tree = tree_instance_new (NULL, 3);
serialise_tree (tree, &one);
+ one_variant = g_variant_new_from_data (G_VARIANT_TYPE (g_variant_type_info_get_type_string (one.type_info)),
+ one.data, one.size, FALSE, NULL, NULL);
+
i_am_writing_byteswapped = TRUE;
serialise_tree (tree, &two);
+ serialise_tree (tree, &three);
i_am_writing_byteswapped = FALSE;
- g_variant_serialised_byteswap (two);
-
- g_assert_cmpmem (one.data, one.size, two.data, two.size);
- g_assert_cmpuint (one.depth, ==, two.depth);
-
+ /* Swap the first byteswapped one back using the function we want to test. */
+ two_variant = g_variant_new_from_data (G_VARIANT_TYPE (g_variant_type_info_get_type_string (two.type_info)),
+ two.data, two.size, FALSE, NULL, NULL);
+ two_byteswapped = g_variant_byteswap (two_variant);
+
+ /* Make the second byteswapped one non-normal (hopefully), and then byteswap
+ * it back using the function we want to test in its non-normal mode.
+ * This might not work because its not necessarily possible to make an
+ * arbitrary random variant non-normal. Adding a single zero byte to the end
+ * often makes something non-normal but still readable. */
+ three_size_copy = three.size + 1;
+ three_data_copy = g_malloc (three_size_copy);
+ memcpy (three_data_copy, three.data, three.size);
+ three_data_copy[three.size] = '\0';
+
+ three_variant = g_variant_new_from_data (G_VARIANT_TYPE (g_variant_type_info_get_type_string (three.type_info)),
+ three_data_copy, three_size_copy, FALSE, NULL, NULL);
+ three_byteswapped = g_variant_byteswap (three_variant);
+
+ /* Check theyre the same. We can always compare @one_variant and
+ * @two_byteswapped. We can only compare @two_byteswapped and
+ * @three_byteswapped if @two_variant and @three_variant are equal: in that
+ * case, the corruption to @three_variant was enough to make it non-normal but
+ * not enough to change its value. */
+ g_assert_cmpvariant (one_variant, two_byteswapped);
+
+ if (g_variant_equal (two_variant, three_variant))
+ g_assert_cmpvariant (two_byteswapped, three_byteswapped);
+
+ g_variant_unref (three_byteswapped);
+ g_variant_unref (three_variant);
+ g_variant_unref (two_byteswapped);
+ g_variant_unref (two_variant);
+ g_variant_unref (one_variant);
tree_instance_free (tree);
g_free (one.data);
g_free (two.data);
+ g_free (three.data);
+ g_free (three_data_copy);
}
static void

View file

@ -0,0 +1,146 @@
From bf008669f26f70426ca30ee8cdcbd48e41a74718 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 15 Dec 2022 13:00:39 +0000
Subject: [PATCH 1/2] =?UTF-8?q?gvariant:=20Check=20offset=20table=20doesn?=
=?UTF-8?q?=E2=80=99t=20fall=20outside=20variant=20bounds?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
When dereferencing the first entry in the offset table for a tuple,
check that it doesnt fall outside the bounds of the variant first.
This prevents an out-of-bounds read from some non-normal tuples.
This bug was introduced in commit 73d0aa81c2575a5c9ae77d.
Includes a unit test, although the test will likely only catch the
original bug if run with asan enabled.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: #2840
oss-fuzz#54302
---
glib/gvariant-serialiser.c | 12 ++++++--
glib/tests/gvariant.c | 63 ++++++++++++++++++++++++++++++++++++++
2 files changed, 72 insertions(+), 3 deletions(-)
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -979,7 +979,8 @@ gvs_tuple_get_member_bounds (GVariantSer
member_info = g_variant_type_info_member_info (value.type_info, index_);
- if (member_info->i + 1)
+ if (member_info->i + 1 &&
+ offset_size * (member_info->i + 1) <= value.size)
member_start = gvs_read_unaligned_le (value.data + value.size -
offset_size * (member_info->i + 1),
offset_size);
@@ -990,7 +991,8 @@ gvs_tuple_get_member_bounds (GVariantSer
member_start &= member_info->b;
member_start |= member_info->c;
- if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_LAST)
+ if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_LAST &&
+ offset_size * (member_info->i + 1) <= value.size)
member_end = value.size - offset_size * (member_info->i + 1);
else if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_FIXED)
@@ -1001,11 +1003,15 @@ gvs_tuple_get_member_bounds (GVariantSer
member_end = member_start + fixed_size;
}
- else /* G_VARIANT_MEMBER_ENDING_OFFSET */
+ else if (member_info->ending_type == G_VARIANT_MEMBER_ENDING_OFFSET &&
+ offset_size * (member_info->i + 2) <= value.size)
member_end = gvs_read_unaligned_le (value.data + value.size -
offset_size * (member_info->i + 2),
offset_size);
+ else /* invalid */
+ member_end = G_MAXSIZE;
+
if (out_member_start != NULL)
*out_member_start = member_start;
if (out_member_end != NULL)
--- a/glib/tests/gvariant.c
+++ b/glib/tests/gvariant.c
@@ -5462,6 +5462,67 @@ test_normal_checking_tuple_offsets4 (voi
g_variant_unref (variant);
}
+/* This is a regression test that dereferencing the first element in the offset
+ * table doesnt dereference memory before the start of the GVariant. The first
+ * element in the offset table gives the offset of the final member in the
+ * tuple (the offset table is stored in reverse), and the position of this final
+ * member is needed to check that none of the tuple members overlap with the
+ * offset table
+ *
+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2840 */
+static void
+test_normal_checking_tuple_offsets5 (void)
+{
+ /* A tuple of type (sss) in normal form would have an offset table with two
+ * entries:
+ * - The first entry (lowest index in the table) gives the offset of the
+ * third `s` in the tuple, as the offset table is reversed compared to the
+ * tuple members.
+ * - The second entry (highest index in the table) gives the offset of the
+ * second `s` in the tuple.
+ * - The offset of the first `s` in the tuple is always 0.
+ *
+ * See §2.5.4 (Structures) of the GVariant specification for details, noting
+ * that the table is only layed out this way because all three members of the
+ * tuple have non-fixed sizes.
+ *
+ * Its not clear whether the 0xaa data of this variant is part of the strings
+ * in the tuple, or part of the offset table. It doesnt really matter. This
+ * is a regression test to check that the code to validate the offset table
+ * doesnt unconditionally try to access the first entry in the offset table
+ * by subtracting the table size from the end of the GVariant data.
+ *
+ * In this non-normal case, that would result in an address off the start of
+ * the GVariant data, and an out-of-bounds read, because the GVariant is one
+ * byte long, but the offset table is calculated as two bytes long (with 1B
+ * sized entries) from the tuples type.
+ */
+ const GVariantType *data_type = G_VARIANT_TYPE ("(sss)");
+ const guint8 data[] = { 0xaa };
+ gsize size = sizeof (data);
+ GVariant *variant = NULL;
+ GVariant *normal_variant = NULL;
+ GVariant *expected = NULL;
+
+ g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2840");
+
+ variant = g_variant_new_from_data (data_type, data, size, FALSE, NULL, NULL);
+ g_assert_nonnull (variant);
+
+ g_assert_false (g_variant_is_normal_form (variant));
+
+ normal_variant = g_variant_get_normal_form (variant);
+ g_assert_nonnull (normal_variant);
+
+ expected = g_variant_new_parsed ("('', '', '')");
+ g_assert_cmpvariant (expected, variant);
+ g_assert_cmpvariant (expected, normal_variant);
+
+ g_variant_unref (expected);
+ g_variant_unref (normal_variant);
+ g_variant_unref (variant);
+}
+
/* Test that an otherwise-valid serialised GVariant is considered non-normal if
* its offset table entries are too wide.
*
@@ -5711,6 +5772,8 @@ main (int argc, char **argv)
test_normal_checking_tuple_offsets3);
g_test_add_func ("/gvariant/normal-checking/tuple-offsets4",
test_normal_checking_tuple_offsets4);
+ g_test_add_func ("/gvariant/normal-checking/tuple-offsets5",
+ test_normal_checking_tuple_offsets5);
g_test_add_func ("/gvariant/normal-checking/tuple-offsets/minimal-sized",
test_normal_checking_tuple_offsets_minimal_sized);
g_test_add_func ("/gvariant/normal-checking/empty-object-path",

View file

@ -0,0 +1,40 @@
From 4d0bed8c4690f7a2692474ef6a570bd99ef45ef1 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 15 Dec 2022 16:49:28 +0000
Subject: [PATCH 2/2] gvariant: Propagate trust when getting a child of a
serialised variant
If a variant is trusted, that means all its children are trusted, so
ensure that their checked offsets are set as such.
This allows a lot of the offset table checks to be avoided when getting
children from trusted serialised tuples, which speeds things up.
No unit test is included because this is just a performance fix. If
there are other slownesses, or regressions, in serialised `GVariant`
performance, the fuzzing setup will catch them like it did this one.
This change does reduce the time to run the oss-fuzz reproducer from 80s
to about 0.7s on my machine.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: #2841
oss-fuzz#54314
---
glib/gvariant-core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/glib/gvariant-core.c
+++ b/glib/gvariant-core.c
@@ -1196,8 +1196,8 @@ g_variant_get_child_value (GVariant *val
child->contents.serialised.bytes =
g_bytes_ref (value->contents.serialised.bytes);
child->contents.serialised.data = s_child.data;
- child->contents.serialised.ordered_offsets_up_to = s_child.ordered_offsets_up_to;
- child->contents.serialised.checked_offsets_up_to = s_child.checked_offsets_up_to;
+ child->contents.serialised.ordered_offsets_up_to = (value->state & STATE_TRUSTED) ? G_MAXSIZE : s_child.ordered_offsets_up_to;
+ child->contents.serialised.checked_offsets_up_to = (value->state & STATE_TRUSTED) ? G_MAXSIZE : s_child.checked_offsets_up_to;
return child;
}

View file

@ -0,0 +1,60 @@
From dc16dffed0480d0c8cdd6a05ede68263fc8723a9 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Thu, 15 Dec 2022 12:51:37 +0000
Subject: [PATCH] gvariant-serialiser: Convert endianness of offsets
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The array of offsets is little-endian, even on big-endian architectures
like s390x.
Fixes: ade71fb5 "gvariant: Dont allow child elements to overlap with each other"
Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/2839
Signed-off-by: Simon McVittie <smcv@collabora.com>
---
glib/gvariant-serialiser.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
--- a/glib/gvariant-serialiser.c
+++ b/glib/gvariant-serialiser.c
@@ -712,17 +712,19 @@ gvs_variable_sized_array_n_children (GVa
/* Find the index of the first out-of-order element in @data, assuming that
* @data is an array of elements of given @type, starting at index @start and
* containing a further @len-@start elements. */
-#define DEFINE_FIND_UNORDERED(type) \
+#define DEFINE_FIND_UNORDERED(type, le_to_native) \
static gsize \
find_unordered_##type (const guint8 *data, gsize start, gsize len) \
{ \
gsize off; \
- type current, previous; \
+ type current_le, previous_le, current, previous; \
\
- memcpy (&previous, data + start * sizeof (current), sizeof (current)); \
+ memcpy (&previous_le, data + start * sizeof (current), sizeof (current)); \
+ previous = le_to_native (previous_le); \
for (off = (start + 1) * sizeof (current); off < len * sizeof (current); off += sizeof (current)) \
{ \
- memcpy (&current, data + off, sizeof (current)); \
+ memcpy (&current_le, data + off, sizeof (current)); \
+ current = le_to_native (current_le); \
if (current < previous) \
break; \
previous = current; \
@@ -730,10 +732,11 @@ gvs_variable_sized_array_n_children (GVa
return off / sizeof (current) - 1; \
}
-DEFINE_FIND_UNORDERED (guint8);
-DEFINE_FIND_UNORDERED (guint16);
-DEFINE_FIND_UNORDERED (guint32);
-DEFINE_FIND_UNORDERED (guint64);
+#define NO_CONVERSION(x) (x)
+DEFINE_FIND_UNORDERED (guint8, NO_CONVERSION);
+DEFINE_FIND_UNORDERED (guint16, GUINT16_FROM_LE);
+DEFINE_FIND_UNORDERED (guint32, GUINT32_FROM_LE);
+DEFINE_FIND_UNORDERED (guint64, GUINT64_FROM_LE);
static GVariantSerialised
gvs_variable_sized_array_get_child (GVariantSerialised value,

View file

@ -0,0 +1,80 @@
From: Simon McVittie <smcv@debian.org>
Date: Mon, 18 Dec 2017 18:06:05 +0000
Subject: gwakeuptest: Be less parallel unless invoked with -m slow
This is a workaround for test failures on the reproducible-builds
infrastructure, where a multi-threaded stress-test sometimes takes longer
to finish on x86_64 than it would have done on slow architectures like
arm and mips on the official Debian autobuilders. It is not clear why.
This change will make this test more likely to pass, but less likely to
detect bugs.
Signed-off-by: Simon McVittie <smcv@debian.org>
Bug-Debian: https://bugs.debian.org/884659
Forwarded: no
---
glib/tests/gwakeuptest.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/glib/tests/gwakeuptest.c b/glib/tests/gwakeuptest.c
index b37fb43..a9bef21 100644
--- a/glib/tests/gwakeuptest.c
+++ b/glib/tests/gwakeuptest.c
@@ -89,6 +89,9 @@ struct context
#define NUM_TOKENS 5
#define TOKEN_TTL 100000
+static gint num_threads = NUM_THREADS;
+static gint token_ttl = TOKEN_TTL;
+
static struct context contexts[NUM_THREADS];
static GThread *threads[NUM_THREADS];
static GWakeup *last_token_wakeup;
@@ -158,7 +161,7 @@ dispatch_token (struct token *token)
struct context *ctx;
gint next_ctx;
- next_ctx = g_test_rand_int_range (0, NUM_THREADS);
+ next_ctx = g_test_rand_int_range (0, num_threads);
ctx = &contexts[next_ctx];
token->owner = ctx;
token->ttl--;
@@ -213,6 +216,12 @@ test_threaded (void)
{
gint i;
+ if (!g_test_slow ())
+ {
+ num_threads = NUM_THREADS / 10;
+ token_ttl = TOKEN_TTL / 10;
+ }
+
/* make sure we don't block forever */
alarm (60);
@@ -230,7 +239,7 @@ test_threaded (void)
last_token_wakeup = g_wakeup_new ();
/* create contexts, assign to threads */
- for (i = 0; i < NUM_THREADS; i++)
+ for (i = 0; i < num_threads; i++)
{
context_init (&contexts[i]);
threads[i] = g_thread_new ("test", thread_func, &contexts[i]);
@@ -238,13 +247,13 @@ test_threaded (void)
/* dispatch tokens */
for (i = 0; i < NUM_TOKENS; i++)
- dispatch_token (token_new (TOKEN_TTL));
+ dispatch_token (token_new (token_ttl));
/* wait until all tokens are gone */
wait_for_signaled (last_token_wakeup);
/* ask threads to quit, join them, cleanup */
- for (i = 0; i < NUM_THREADS; i++)
+ for (i = 0; i < num_threads; i++)
{
context_quit (&contexts[i]);
g_thread_join (threads[i]);

40
debian/patches/series vendored Normal file
View file

@ -0,0 +1,40 @@
01_gettext-desktopfiles.patch
0001-timer-test-use-volatile-for-locals.patch
gwakeuptest-Be-less-parallel-unless-invoked-with-m-slow.patch
debian/02_gettext-desktopfiles-ubuntu.patch
debian/03_disble_glib_compile_schemas_warning.patch
debian/06_thread_test_ignore_prctl_fail.patch
debian/closures-test-Skip-on-arm-unless-flaky-tests-are-allowed.patch
debian/Disable-some-tests-on-slow-architectures-which-keep-faili.patch
debian/Skip-test-which-performs-some-unreliable-floating-point-c.patch
debian/Skip-unreliable-gdbus-threading-tests--by-default.patch
debian/gmenumodel-test-Mark-as-flaky.patch
debian/gvariant-test-Don-t-run-at-build-time-on-mips.patch
debian/testfilemonitor-Skip-if-we-are-avoiding-flaky-tests.patch
debian/gdbus-server-auth-Normally-skip-flaky-DBUS_COOKIE_SHA1-te.patch
debian/Skip-memory-monitor-dbus-test-if-not-specifically-request.patch
debian/Add-extra-debug-to-memory-monitor-dbus-test.patch
debian/tests-Skip-debugcontroller-test.patch
debian/gdesktopappinfo-Recognize-gnome-console-as-a-terminal-app.patch
0001-gio-Make-portal-support-aware-of-snaps.patch
gvariant-security-1-01.patch
gvariant-security-1-02.patch
gvariant-security-1-03.patch
gvariant-security-1-04.patch
gvariant-security-1-05.patch
gvariant-security-1-06.patch
gvariant-security-1-07.patch
gvariant-security-1-08.patch
gvariant-security-1-09.patch
gvariant-security-1-10.patch
gvariant-security-1-11.patch
gvariant-security-1-12.patch
gvariant-security-1-13.patch
gvariant-security-1-14.patch
gvariant-security-1-15.patch
gvariant-security-1-16.patch
gvariant-security-1-17.patch
gvariant-security-1-18.patch
gvariant-security-2-1.patch
gvariant-security-2-2.patch
gvariant-security-3-1.patch

296
debian/rules vendored Executable file
View file

@ -0,0 +1,296 @@
#!/usr/bin/make -f
binaries := $(shell dh_listpackages)
export DEB_BUILD_MAINT_OPTIONS=hardening=+bindnow
# Ensure the build aborts when there are still references to undefined symbols
DEB_LDFLAGS_MAINT_APPEND += -Wl,-z,defs
# NB: do NOT use -Wl,--as-needed to build glib; for instance the link to
# pthread is carefully crafted to allow dlopen()ing pthread-using libs; see
# https://marc.info/?i=1257999019.21780.15.camel@marzipan aka
# https://mail.gnome.org/archives/gtk-devel-list/2009-November/msg00096.html
DEB_LDFLAGS_MAINT_APPEND += -Wl,--no-as-needed
# Make the linker work a bit harder so dynamic loading can be done faster
DEB_LDFLAGS_MAINT_APPEND += -Wl,-O1
include /usr/share/dpkg/default.mk
%:
dh $@
ifneq ($(filter hppa,$(DEB_HOST_ARCH_CPU)),)
stack_grows_up = true
else
stack_grows_up = false
endif
ifneq ($(filter kfreebsd,$(DEB_HOST_ARCH_OS)),)
have_non_stub_xattr = false
else
have_non_stub_xattr = true
endif
export DH_MESON_CROSS_FILE = debian/cross.txt
# We edit the debcrossgen output to work around unimplemented feature
# request https://bugs.debian.org/912559
override_dh_auto_configure:
ifneq ($(DEB_HOST_ARCH),$(DEB_BUILD_ARCH))
/usr/share/meson/debcrossgen \
-o debian/cross.txt.in
debian/set-cross-properties \
have_c99_snprintf=true \
have_c99_vsnprintf=true \
have_strlcpy=false \
have_unix98_printf=true \
growing_stack=$(stack_grows_up) \
< debian/cross.txt.in > debian/cross.txt
endif
dh_auto_configure \
--builddirectory=debian/build/deb \
-- \
$(DEB_CONFIGURE_EXTRA_FLAGS) \
$(DEB_CONFIGURE_FLAGS_deb) \
$(NULL)
ifneq ($(filter %-udeb,$(binaries)),)
dh_auto_configure \
--builddirectory=debian/build/udeb \
-- \
$(DEB_CONFIGURE_EXTRA_FLAGS) \
$(DEB_CONFIGURE_FLAGS_udeb) \
$(NULL)
endif
override_dh_clean:
rm -rf $(CURDIR)/debian/build \
$(CURDIR)/debian/install
dh_clean -Xorg.gtk.test.gschema.xml.orig -Xorg.gtk.test.gschema.override.orig
override_dh_makeshlibs:
dh_makeshlibs -plibglib2.0-tests -n
dh_makeshlibs --remaining-packages --add-udeb=libglib2.0-udeb -Xlibgiofam.so -- -c4
# (Ubuntu-specific)
# Don't strip translations from the installed tests; makes them environment dependent.
override_dh_translations:
dh_translations -Xinstalled-tests
# Do not clutter $HOME with ~/.dbus-keyrings and avoid failure on the buildds
# where creating /home/buildd/.dbus-keyrings fails
export HOME=$(CURDIR)/debian/build
# Make sure that everything that uses D-Bus is creating its own temporary
# session rather than polluting the developer's (or failing, on buildds)
export DBUS_SESSION_BUS_ADDRESS=this-should-not-be-used-and-will-fail:
ifeq ($(DEB_HOST_ARCH_OS), linux)
handle_test_failure := exit $$?
else
handle_test_failure := true
endif
# Upstream test timeouts assume an otherwise unloaded system, but that
# isn't necessarily the case for a porterbox or multiple parallel builds
test_timeout_multiplier = 3
ifneq ($(filter arm hppa mips% sparc%,$(DEB_HOST_ARCH_CPU)),)
$(info Slow architecture detected, increasing test timeout)
test_timeout_multiplier = 5
endif
ifneq ($(filter m68k riscv64 sh4,$(DEB_HOST_ARCH_CPU)),)
$(info Architecture with qemu buildds detected, increasing test timeout a lot)
test_timeout_multiplier = 20
endif
override_dh_auto_test-arch:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
# Remove LD_PRELOAD so we don't run with fakeroot, which makes dbus-related tests fail
# First run the non-flaky tests, and fail the build if they fail (on linux)
env -u LD_PRELOAD \
DEB_BUILD_TIME_TESTS=1 \
LC_ALL=C.UTF-8 \
MESON_TESTTHREADS=1 \
debian/tests/run-with-locales \
--generate de_DE=ISO-8859-1 \
--generate de_DE.utf8 \
--generate de_DE@euro.utf8 \
--generate el_GR.utf8 \
--generate en_GB=ISO-8859-1 \
--generate en_GB.utf8 \
--generate en_US=ISO-8859-1 \
--generate en_US.utf8 \
--generate es_ES.utf8 \
--generate fa_IR=UTF-8 \
--generate fa_IR.utf8 \
--generate fr_FR.utf8 \
--generate hr_HR.utf8 \
--generate ja_JP.utf8 \
--generate ja_JP.EUC-JP \
--generate lt_LT.utf8 \
--generate pl_PL=ISO-8859-2 \
--generate pl_PL.ISO-8859-2 \
--generate pl_PL.utf8 \
--generate ru_RU=ISO-8859-5 \
--generate ru_RU.utf8 \
--generate sr_RS=UTF-8 \
--generate sr_RS@latin=UTF-8 \
--generate sv_SE=ISO-8859-1 \
--generate sv_SE.utf8 \
--generate tr_TR=ISO-8859-9 \
--generate tr_TR.utf8 \
--generate tt_RU=UTF-8 \
--generate tt_RU.utf8 \
--generate tt_RU@iqtelif=UTF-8 \
-- \
meson test -C debian/build/deb \
--no-rebuild \
--num-processes 1 \
--timeout-multiplier $(test_timeout_multiplier) \
--no-suite flaky \
--verbose \
|| $(handle_test_failure)
# and then run the flaky ones, but ignore them failing
env -u LD_PRELOAD \
DEB_BUILD_TIME_TESTS=1 \
LC_ALL=C.UTF-8 \
MESON_TESTTHREADS=1 \
meson test -C debian/build/deb \
--no-rebuild \
--num-processes 1 \
--timeout-multiplier $(test_timeout_multiplier) \
--suite flaky \
--verbose \
|| true
endif
# Skip most build-time tests if all we are building is documentation;
# running them once per architecture is plenty. As an exception, do run the
# documentation completeness checks, which won't normally be run on
# architecture-specific buildds (except in Ubuntu).
override_dh_auto_test-indep:
meson test -C debian/build/deb \
--no-rebuild \
--num-processes 1 \
--timeout-multiplier $(test_timeout_multiplier) \
--verbose \
gio-doc-check glib-doc-check gobject-doc-check \
|| $(handle_test_failure)
# Let's get failing tests' stdout and stderr so we have some information when
# a build fails
export VERBOSE=1
ifeq ($(DEB_HOST_ARCH_OS),linux)
enable_libmount := enabled
enable_selinux := enabled
else
enable_libmount := disabled
enable_selinux := disabled
endif
ifneq ($(filter hurd,$(DEB_HOST_ARCH_OS)),)
use_fam := true
else
use_fam := false
endif
DEB_CONFIGURE_FLAGS_deb := \
--default-library both \
-Dfam=$(use_fam) \
-Dinstalled_tests=true \
-Dlibelf=enabled \
-Dlibmount=$(enable_libmount) \
-Dman=true \
-Dselinux=$(enable_selinux) \
-Dsystemtap=true \
-Dxattr=$(have_non_stub_xattr) \
$(NULL)
ifneq ($(filter libglib2.0-doc,$(binaries)),)
DEB_CONFIGURE_FLAGS_deb += -Dgtk_doc=true
else
DEB_CONFIGURE_FLAGS_deb += -Dgtk_doc=false
endif
DEB_CONFIGURE_FLAGS_udeb := \
--default-library shared \
-Dgtk_doc=false \
-Dinstalled_tests=false \
-Dlibmount=disabled \
-Dselinux=disabled \
-Dxattr=$(have_non_stub_xattr) \
$(NULL)
override_dh_auto_build:
mkdir -p debian/tmp-xdg-runtime-dir
dh_auto_build --builddirectory=debian/build/deb
ifneq ($(filter %-udeb,$(binaries)),)
dh_auto_build --builddirectory=debian/build/udeb
endif
override_dh_auto_install:
set -e; for script in postinst postrm triggers; do \
sed -e"s/#MULTIARCH#/$(DEB_HOST_MULTIARCH)/g" \
-e"s/#ARCH#/$(DEB_HOST_ARCH)/g" \
debian/libglib2.0-0.$$script.in \
> debian/libglib2.0-0.$$script ; \
done
ifneq ($(filter %-udeb,$(binaries)),)
dh_auto_install -plibglib2.0-udeb --builddirectory=debian/build/udeb --destdir=debian/install/udeb
endif
dh_auto_install --remaining-packages --builddirectory=debian/build/deb --destdir=debian/install/deb
override_dh_python3:
# dh_python3 can't process both a private directory and /usr/bin
# in the same invocation
dh_python3 -plibglib2.0-dev-bin /usr/share/glib-2.0/codegen
dh_python3 -plibglib2.0-tests --no-ext-rename /usr/libexec/installed-tests/glib
dh_python3
override_dh_install:
# Unwanted bits from the .deb build
rm -fr debian/install/deb/usr/share/glib-2.0/codegen/__pycache__
ifneq ($(filter %-udeb,$(binaries)),)
# Unwanted bits from the .udeb build
rm -f debian/install/udeb/usr/lib/*/*.so
rm -fr debian/install/udeb/usr/share/gdb
rm -fr debian/install/udeb/usr/share/gettext/its
rm -fr debian/install/udeb/usr/share/glib-2.0/codegen
rm -fr debian/install/udeb/usr/share/glib-2.0/gdb
rm -fr debian/install/udeb/usr/share/glib-2.0/valgrind
rm -fr debian/install/udeb/usr/share/man
dh_install -plibglib2.0-udeb --sourcedir=debian/install/udeb
endif
ifneq ($(filter %-tests,$(binaries)),)
sed -i -e '/^#!.*/,1 d' debian/install/deb/usr/libexec/installed-tests/glib/taptestrunner.py
endif
ifneq ($(filter hurd,$(DEB_HOST_ARCH_OS)),)
dh_install -plibglib2.0-0 --sourcedir=debian/install/deb usr/lib/${DEB_HOST_MULTIARCH}/gio/modules/libgiofam.so usr/lib/${DEB_HOST_MULTIARCH}/gio/modules
endif
dh_install --remaining-packages --sourcedir=debian/install/deb
install -D -t debian/libglib2.0-0/usr/share/glib-2.0/ debian/clean-up-unmanaged-libraries
install -D -t debian/libglib2.0-0/usr/lib/${DEB_HOST_MULTIARCH}/glib-2.0/ debian/gio-launch-desktop
override_dh_dwz:
dh_dwz -Nlibglib2.0-udeb
# debhelper >= 13.4 makes all of /usr/libexec executable, which is not
# quite right for installed-tests
override_dh_fixperms:
dh_fixperms -Xusr/libexec/installed-tests
ifneq ($(filter %-tests,$(binaries)),)
chmod --changes u=rw,og=r debian/libglib2.0-tests/usr/libexec/installed-tests/*/*.so
chmod --changes u=rw,og=r debian/libglib2.0-tests/usr/libexec/installed-tests/*/*/*.so
chmod --recursive --changes a+rX,u+w,og-w debian/libglib2.0-tests/usr/libexec/installed-tests
endif
override_dh_missing:
dh_missing --sourcedir=debian/install/deb
ifneq ($(filter %-udeb,$(binaries)),)
dh_missing --sourcedir=debian/install/udeb
endif

22
debian/set-cross-properties vendored Executable file
View file

@ -0,0 +1,22 @@
#!/usr/bin/python3
import sys
def write_properties(properties):
for prop in properties:
k, v = prop.split('=', 1)
print('{} = {}'.format(k, v))
if __name__ == '__main__':
for line in sys.stdin:
sys.stdout.write(line)
if line.strip() == '[properties]':
write_properties(sys.argv[1:])
done = True
if not done:
print('[properties]')
write_properties(sys.argv[1:])

10
debian/shlibs.local vendored Normal file
View file

@ -0,0 +1,10 @@
libgio-2.0 0 libglib2.0-0 (= ${binary:Version})
libglib-2.0 0 libglib2.0-0 (= ${binary:Version})
libgmodule-2.0 0 libglib2.0-0 (= ${binary:Version})
libgobject-2.0 0 libglib2.0-0 (= ${binary:Version})
libgthread-2.0 0 libglib2.0-0 (= ${binary:Version})
udeb: libgio-2.0 0 libglib2.0-udeb (= ${binary:Version})
udeb: libglib-2.0 0 libglib2.0-udeb (= ${binary:Version})
udeb: libgmodule-2.0 0 libglib2.0-udeb (= ${binary:Version})
udeb: libgobject-2.0 0 libglib2.0-udeb (= ${binary:Version})
udeb: libgthread-2.0 0 libglib2.0-udeb (= ${binary:Version})

1
debian/source/format vendored Normal file
View file

@ -0,0 +1 @@
3.0 (quilt)

170
debian/tests/bug896019 vendored Executable file
View file

@ -0,0 +1,170 @@
#!/bin/bash
set -e
. debian/tests/lib.sh
cd "$AUTOPKGTEST_TMP"
biarch=
getopt_temp="help"
getopt_temp="$getopt_temp,biarch"
getopt_temp="$(getopt -o '' --long "$getopt_temp" -n "$me" -- "$@")"
eval "set -- $getopt_temp"
while [ "$#" -gt 0 ]
do
case "$1" in
(--biarch)
biarch=yes
shift
;;
(--)
shift
break
;;
(-*)
warning "Unknown option: $1"
usage 2
;;
(*)
break
;;
esac
done
system_arch="${DEB_HOST_ARCH:-"$(dpkg --print-architecture)"}"
multiarch="${DEB_HOST_MULTIARCH:-"$(dpkg-architecture -a"$system_arch" -qDEB_HOST_MULTIARCH)"}"
foreign_arch=
foreign_multiarch=
if [ -n "$biarch" ]; then
case "$system_arch" in
(amd64)
foreign_arch="i386"
foreign_multiarch="i386-linux-gnu"
;;
(arm64)
foreign_arch="armhf"
foreign_multiarch="arm-linux-gnueabihf"
;;
(*)
echo "1..0 # SKIP - no secondary architecture" >&7
exit 77
esac
fi
if [ -n "$foreign_arch" ]; then
require dpkg --add-architecture "$foreign_arch"
require_apt "$foreign_arch"
fi
if [ -n "$foreign_arch" ]; then
multiarchs=("$multiarch" "$foreign_multiarch")
else
multiarchs=("$multiarch")
fi
require_apt_stretch
package=libglib2.0-0
old_version=2.50.3-2+deb9u2
soname=libglib-2.0.so.0
other_sonames=(libgio-2.0.so.0 libgmodule-2.0.so.0 libgobject-2.0.so.0 libgthread-2.0.so.0)
tail=5000.3
if ! new_version=$(dpkg-query -W -f '${Version}' "$package:$system_arch"); then
echo "1..0 # SKIP - unable to get version of $package:$system_arch" >&7
exit 77
fi
if ! apt-get download "$package=$old_version"; then
echo "1..0 # SKIP - unable to download $package=$old_version" >&7
exit 77
fi
if [ -n "$foreign_arch" ] && ! apt-get download "$package:$foreign_arch=$old_version"; then
echo "1..0 # SKIP - unable to download $package:$foreign_arch=$old_version" >&7
exit 77
fi
if [ -n "$foreign_arch" ]; then
require apt-get -y install --reinstall "$package=$new_version" "$package:$foreign_arch=$new_version"
good_foreign_realpath="$(readlink -f "/usr/lib/$foreign_multiarch/$soname")"
else
require apt-get -y install --reinstall "$package=$new_version"
good_foreign_realpath=
fi
good_realpath="$(readlink -f "/usr/lib/$multiarch/$soname")"
# Pretend the version from stretch got stuck on the system somehow.
# (This is the wrong way to use dpkg-deb, never do this in production.)
require dpkg-deb --vextract "${package}_${old_version}_${system_arch}.deb" .
if [ -n "$foreign_arch" ]; then
require dpkg-deb --vextract "${package}_${old_version}_${foreign_arch}.deb" .
fi
for ma in "${multiarchs[@]}"; do
cp -a ./lib/"$ma"/"$soname" /lib/"$ma"/
cp -a ./lib/"$ma"/"$soname".* /lib/"$ma"/
for other in "${other_sonames[@]}"; do
cp -a ./usr/lib/"$ma"/"$other" /usr/lib/"$ma"/
cp -a ./usr/lib/"$ma"/"$other".* /usr/lib/"$ma"/
done
done
assert_succeeds ldconfig --verbose
for ma in "${multiarchs[@]}"; do
echo "Status before reinstalling $package"
assert_succeeds ls -il "/lib/$ma/$soname"
assert_succeeds ls -il "/lib/$ma/$soname".*
assert_succeeds ls -il "/lib/$ma/$soname.$tail"
assert_succeeds ls -il "/usr/lib/$ma/$soname"
assert_succeeds ls -il "/usr/lib/$ma/$soname".*
done
for other in "$soname" "${other_sonames[@]}"; do
echo "Running 'true' with $other preloaded to see what we get..."
env LD_DEBUG=libs LD_PRELOAD="$other" true || true
done
if [ -n "$foreign_arch" ]; then
assert_succeeds apt-get -y install --reinstall "$package:$system_arch=$new_version" "$package:$foreign_arch=$new_version"
else
assert_succeeds apt-get -y install --reinstall "$package:$system_arch=$new_version"
fi
for ma in "${multiarchs[@]}"; do
if [ "/usr/lib/$ma" -ef "/lib/$ma" ]; then
echo "Merged-/usr system"
assert_status 1 test "/usr/lib/$ma/$soname" -ef "/usr/lib/$ma/$soname.$tail"
else
echo "Non-merged-/usr system"
assert_succeeds ls -il "/lib/$ma/removed-by-upgrade-bug896019/"
assert_status 1 test -e "/lib/$ma/$soname.$tail"
assert_status 1 test -e "/lib/$ma/$soname"
assert_succeeds test -e "/usr/lib/$ma/$soname"
fi
done
assert_succeeds test "/usr/lib/$multiarch/$soname" -ef "$good_realpath"
if [ -n "$foreign_arch" ]; then
assert_succeeds test "/usr/lib/$foreign_multiarch/$soname" -ef "$good_foreign_realpath"
fi
for other in "$soname" "${other_sonames[@]}"; do
env LD_DEBUG=libs LD_PRELOAD="$other" true
done
finish
# vim:set sw=4 sts=4 et:

2
debian/tests/bug896019-biarch vendored Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh
exec debian/tests/bug896019 --biarch

143
debian/tests/build vendored Executable file
View file

@ -0,0 +1,143 @@
#!/bin/sh
# autopkgtest check: Build and run a program against glib, to verify that the
# headers and pkg-config file are installed correctly
# (C) 2012,2019 Canonical Ltd.
# (C) 2018 Simon McVittie
# Authors: Martin Pitt <martin.pitt@ubuntu.com>, Simon McVittie
set -eux
mode=dynamic
getopt_temp="$(getopt -o '' --long 'static' -n debian/tests/build -- "$@")"
eval set -- "$getopt_temp"
while true; do
case "$1" in
(--static)
mode=static
shift
continue
;;
(--)
shift
break
;;
(*)
echo "getopt: Internal error" >&2
exit 2
esac
done
WORKDIR=$(mktemp -d)
trap 'rm -rf "${WORKDIR}"' 0 INT QUIT ABRT PIPE TERM
cd "${WORKDIR}"
if [ -n "${DEB_HOST_GNU_TYPE:-}" ]; then
CROSS_COMPILE="${DEB_HOST_GNU_TYPE}-"
else
CROSS_COMPILE=
fi
cat <<EOF > glib.c
#include <glib.h>
int main(void)
{
g_assert_cmpint (g_strcmp0 (NULL, "hello"), ==, -1);
g_assert_cmpstr (g_getenv ("foo"), ==, "bar");
return 0;
}
EOF
cat <<EOF > gobject.c
#include <glib-object.h>
int main(void)
{
g_assert_cmpuint (G_TYPE_OBJECT, !=, G_TYPE_INVALID);
return 0;
}
EOF
cat <<EOF > gio.c
#include <gio/gio.h>
int main(void)
{
g_assert_cmpuint (G_TYPE_FILE, !=, G_TYPE_INVALID);
return 0;
}
EOF
cat <<EOF > gio-unix.c
#include <gio/gunixfdlist.h>
int main(void)
{
g_assert_cmpuint (G_TYPE_UNIX_FD_LIST, !=, G_TYPE_INVALID);
return 0;
}
EOF
cat <<EOF > gmodule.c
#include <gmodule.h>
int main(void)
{
GModule *module;
g_assert_true (g_module_supported ());
module = g_module_open (NULL, 0);
g_assert_nonnull (module);
g_assert_true (g_module_close (module));
return 0;
}
EOF
cat <<EOF > gthread.c
#include <glib.h>
static gpointer
other_cb (gpointer nil)
{
return "hello";
}
int main(void)
{
GThread *other;
gpointer ret;
other = g_thread_new ("other", other_cb, NULL);
g_assert_nonnull (other);
ret = g_thread_join (other);
g_assert_cmpstr (ret, ==, "hello");
return 0;
}
EOF
for lib in glib gobject gio gio-unix gmodule gthread; do
cflags=
pcflags=
packages="${lib}-2.0"
case "$mode" in
(static)
cflags=-static
pcflags=--static
case "$lib" in
(gio|gio-unix)
# GIO depends on libmount which no longer supports
# being linked statically
continue
;;
esac
;;
esac
# shellcheck disable=SC2046
${CROSS_COMPILE}gcc $cflags -o ${lib}-$mode ${lib}.c $(${CROSS_COMPILE}pkg-config $pcflags --cflags --libs ${packages})
echo "build ($lib, $mode): OK"
[ -x ${lib}-$mode ]
foo=bar ./${lib}-$mode
echo "run ($lib, $mode): OK"
done

2
debian/tests/build-static vendored Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh
exec debian/tests/build --static

15
debian/tests/control vendored Normal file
View file

@ -0,0 +1,15 @@
Tests: build build-static
Depends: libglib2.0-dev, build-essential
Restrictions: allow-stderr superficial
Tests: installed-tests
Depends: dbus (>= 1.8), dbus-x11, gnome-desktop-testing, libglib2.0-tests, locales | locales-all, xauth, xvfb
Restrictions: allow-stderr
Tests: flaky
Depends: dbus (>= 1.8), dbus-x11, gnome-desktop-testing, libglib2.0-tests, locales | locales-all, xauth, xvfb
Restrictions: allow-stderr flaky
Tests: bug896019 bug896019-biarch
Depends: dpkg-dev, libglib2.0-0
Restrictions: allow-stderr, breaks-testbed, needs-root, skippable

72
debian/tests/flaky vendored Executable file
View file

@ -0,0 +1,72 @@
#!/bin/sh
# autopkgtest check: Run the installed-tests to verify glib works correctly
# This part runs tests that have been marked as opt-in due to being flaky
# on at least some architectures.
# (C) 2013 Canonical Ltd.
# (C) 2019 Collabora Ltd.
set -eu
NULL=
export DEB_ALLOW_FLAKY_TESTS=1
# Disable gvfs if it happens to be installed. We want to test the built-in
# stuff
export GIO_USE_VFS=local
export GIO_USE_VOLUME_MONITOR=unix
export XDG_RUNTIME_DIR="$AUTOPKGTEST_TMP"
printf "Running as: "; id -a
printf "passwd entry: "; getent passwd "$(id -u)" || echo "(exit status $?)"
printf "group entry: "; getent group "$(id -g)" || echo "(exit status $?)"
echo "Environment:"
env | LC_ALL=C sort -u
exec dbus-run-session -- \
xvfb-run -a \
debian/tests/run-with-locales \
--generate de_DE=ISO-8859-1 \
--generate de_DE.utf8 \
--generate de_DE@euro.utf8 \
--generate el_GR.utf8 \
--generate en_GB=ISO-8859-1 \
--generate en_GB.utf8 \
--generate en_US=ISO-8859-1 \
--generate en_US.utf8 \
--generate es_ES.utf8 \
--generate fa_IR=UTF-8 \
--generate fa_IR.utf8 \
--generate fr_FR.utf8 \
--generate hr_HR.utf8 \
--generate ja_JP.utf8 \
--generate ja_JP.EUC-JP \
--generate lt_LT.utf8 \
--generate pl_PL=ISO-8859-2 \
--generate pl_PL.ISO-8859-2 \
--generate pl_PL.utf8 \
--generate ru_RU=ISO-8859-5 \
--generate ru_RU.utf8 \
--generate sr_RS=UTF-8 \
--generate sr_RS@latin=UTF-8 \
--generate sv_SE=ISO-8859-1 \
--generate sv_SE.utf8 \
--generate tr_TR=ISO-8859-9 \
--generate tr_TR.utf8 \
--generate tt_RU=UTF-8 \
--generate tt_RU.utf8 \
--generate tt_RU@iqtelif=UTF-8 \
-- \
gnome-desktop-testing-runner \
glib/closure-refcount.test \
glib/debugcontroller.test \
glib/gdbus-server-auth.test \
glib/gdbus-threading.test \
glib/gmenumodel.test \
glib/mainloop.test \
glib/memory-monitor-dbus.test \
glib/socket.test \
glib/testfilemonitor.test \
glib/timeout.test \
glib/timer.test \
${NULL}

55
debian/tests/installed-tests vendored Executable file
View file

@ -0,0 +1,55 @@
#!/bin/sh
# autopkgtest check: Run the installed-tests to verify glib works correctly
# (C) 2013 Canonical Ltd.
# Author: Iain Lane <iain.lane@canonical.com>
set -eu
# Disable gvfs if it happens to be installed. We want to test the built-in
# stuff
export GIO_USE_VFS=local
export GIO_USE_VOLUME_MONITOR=unix
export XDG_RUNTIME_DIR="$AUTOPKGTEST_TMP"
printf "Running as: "; id -a
printf "passwd entry: "; getent passwd "$(id -u)" || echo "(exit status $?)"
printf "group entry: "; getent group "$(id -g)" || echo "(exit status $?)"
echo "Environment:"
env | LC_ALL=C sort -u
exec dbus-run-session -- \
xvfb-run -a \
debian/tests/run-with-locales \
--generate de_DE=ISO-8859-1 \
--generate de_DE.utf8 \
--generate de_DE@euro.utf8 \
--generate el_GR.utf8 \
--generate en_GB=ISO-8859-1 \
--generate en_GB.utf8 \
--generate en_US=ISO-8859-1 \
--generate en_US.utf8 \
--generate es_ES.utf8 \
--generate fa_IR=UTF-8 \
--generate fa_IR.utf8 \
--generate fr_FR.utf8 \
--generate hr_HR.utf8 \
--generate ja_JP.utf8 \
--generate ja_JP.EUC-JP \
--generate lt_LT.utf8 \
--generate pl_PL=ISO-8859-2 \
--generate pl_PL.ISO-8859-2 \
--generate pl_PL.utf8 \
--generate ru_RU=ISO-8859-5 \
--generate ru_RU.utf8 \
--generate sr_RS=UTF-8 \
--generate sr_RS@latin=UTF-8 \
--generate sv_SE=ISO-8859-1 \
--generate sv_SE.utf8 \
--generate tr_TR=ISO-8859-9 \
--generate tr_TR.utf8 \
--generate tt_RU=UTF-8 \
--generate tt_RU.utf8 \
--generate tt_RU@iqtelif=UTF-8 \
-- \
gnome-desktop-testing-runner glib

124
debian/tests/lib.sh vendored Normal file
View file

@ -0,0 +1,124 @@
#!/bin/sh
test_num=0
fail=0
# TAP output goes to fd 7, which is our original stdout
exec 7>&1
# Other stdout goes to our original stderr
exec >&2
require () {
if ! "$@"; then
echo "1..0 # SKIP - command failed: $*" >&7
exit 77
fi
}
require_apt_stretch () {
mirror="$(perl -ne 'if (m{^deb\s+(https?://[-\w.:]+)/debian/?\s}) { print "$1\n"; exit; }' /etc/apt/sources.list /etc/apt/sources.list.d/*)"
if [ -n "$mirror" ]; then
echo >> /etc/apt/sources.list
echo "deb $mirror/debian stretch main" >> /etc/apt/sources.list
else
echo "1..0 # SKIP - unable to guess how to set up an apt source for stretch" >&7
exit 77
fi
require_apt
}
require_apt () {
local arch="${1-}"
if [ -n "${DEB_HOST_ARCH-}" ]; then
host_suffix=":${DEB_HOST_ARCH}"
fi
if ! apt-get -y update; then
echo "1..0 # SKIP - apt not configured?" >&7
exit 77
fi
if [ -n "$arch" ]; then
if ! apt-get -y install libc6:$arch; then
echo "1..0 # SKIP - cannot install libc6:$arch" >&7
exit 77
fi
else
if ! apt-get -y install hello; then
echo "1..0 # SKIP - apt not configured?" >&7
exit 77
fi
fi
}
assert_succeeds () {
assert_status 0 "$@"
}
assert_status () {
local expected="$1"
local e
shift
test_num=$(( $test_num + 1 ))
echo "# $*"
if "$@"; then
if [ "x$expected" = x0 ]; then
echo "ok $test_num - “$*" >&7
else
echo "not ok $test_num - “$*” succeeded but should have failed" >&7
fail=1
fi
else
e="$?"
if [ "x$expected" = "x$e" ] || [ "x$expected" = xfailure ]; then
echo "ok $test_num - “$*” failed with status $e as expected" >&7
else
echo "not ok $test_num - “$*” expected status $expected, got $e" >&7
fail=1
fi
fi
}
assert_output () {
local expected="$1"
shift
local really
test_num=$(( $test_num + 1 ))
echo "# $*"
if really="$("$@")"; then
if [ "x$expected" = "x$really" ]; then
echo "ok $test_num - “$*” returned “$really” as expected" >&7
else
echo "not ok $test_num - expected “$*” to output “$*”, got “$really" >&7
fail=1
fi
else
e="$?"
echo "not ok $test_num - “$*” failed with exit status $e" >&7
fail=1
fi
}
ok () {
test_num=$(( $test_num + 1 ))
echo "ok $test_num - $*" >&7
}
skip_to_the_end () {
test_num=$(( $test_num + 1 ))
echo "not ok $test_num # SKIP $*" >&7
finish
}
finish () {
echo "1..$test_num" >&7
exit "$fail"
}
# vim:set sw=4 sts=4 et:

165
debian/tests/run-with-locales vendored Executable file
View file

@ -0,0 +1,165 @@
#!/bin/sh
#
# Run a wrapped command with at least the requested locales available.
# Requires a dependency on locales | locales-all.
# The requested locales must be of the form foo_FOO.utf8, or special-cased
# in generate(), or listed in /usr/share/i18n/SUPPORTED, or specify the
# locale in the form locale=charset.
#
# Copyright 2016-2021 Simon McVittie
# Copyright 2017-2018 Collabora Ltd.
#
# SPDX-License-Identifier: MIT
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
# Assume a Debian Policy §10.4-compatible shell like dash or bash (with the
# 'local' builtin)
# shellcheck disable=SC2039
set -eu
me="$(basename "$0")"
tempdir=
usage () {
local status="${1-2}"
if [ "$status" -ne 0 ]; then
exec >&2
fi
echo "Usage: $me [--generate LOCALE...] [--] COMMAND [ARGS...]"
exit "$status"
}
getopt_temp=help
getopt_temp="$getopt_temp,generate:"
getopt_temp="$(getopt -o '+' --long "$getopt_temp" -n "$0" -- "$@")"
eval set -- "$getopt_temp"
unset getopt_temp
generate () {
local locale="$1"
local charset=""
local source
local output
echo "$me: $locale..." >&2
case "$locale" in
(*=*)
source="${locale%=*}"
output="$source"
;;
(*.*)
source="${locale%.*}"
output="$source.$(
export LC_ALL=C
printf '%s' "${locale##*.}" | \
tr '[:upper:]' '[:lower:]' | \
tr -d -C '[:lower:][:digit:]'
)"
;;
(*)
source="${locale}"
output="${locale}"
esac
if [ -e "/usr/lib/locale/$output/LC_MESSAGES/SYS_LC_MESSAGES" ]; then
printf '\t%s\n' "Found in locales-all" >&2
return
fi
if ! [ -d /usr/share/i18n/charmaps ]; then
echo "$me: $locale not in locales-all and /usr/share/i18n/charmaps not found" >&2
return
fi
case "$locale" in
(*=*)
charset="${locale##*=}"
;;
(*.utf8 | *.UTF-8)
charset="UTF-8"
;;
(*.*)
charset="${locale##*.}"
;;
esac
if [ -z "$charset" ]; then
echo "$me: $locale charset not known" >&2
exit 1
fi
printf '\t%s\n' "Character set: $charset" >&2
printf '\t%s\n' "Source file: $source" >&2
if [ -z "$tempdir" ]; then
tempdir="$(mktemp -d)"
trap 'rm -fr "$tempdir"' EXIT
fi
printf '\t%s\n' "Output: $tempdir/$output" >&2
localedef -i "$source" -f "$charset" "$tempdir/$output"
}
while [ "$#" -gt 0 ]; do
case "$1" in
(--help)
usage 2
# not reached
;;
(--generate)
generate "$2"
shift 2
;;
(--)
shift
break
;;
(-*)
echo "$me: Unknown option: $1" >&2
usage 2
# not reached
;;
(*)
break
;;
esac
done
if [ -n "$tempdir" ]; then
export LOCPATH="$tempdir"
fi
"$@"
# vim:set sw=4 sts=4 et:

6
debian/upstream/metadata vendored Normal file
View file

@ -0,0 +1,6 @@
---
Name: GLib
Bug-Database: https://gitlab.gnome.org/GNOME/glib/issues/new
Repository: https://gitlab.gnome.org/GNOME/glib.git
Repository-Browse: https://gitlab.gnome.org/GNOME/glib/
Security-Contact: https://gitlab.gnome.org/GNOME/glib/-/blob/HEAD/SECURITY.md

7
debian/watch vendored Normal file
View file

@ -0,0 +1,7 @@
version=4
opts="searchmode=plain, uversionmangle=s/\.(alpha|beta|rc)/~$1/, downloadurlmangle=s|cache.json||" \
https://download.gnome.org/sources/glib/cache.json \
[\d.]+/glib-([\d.]+)@ARCHIVE_EXT@
#opts="mode=git,compression=xz" \
#https://gitlab.gnome.org/GNOME/glib.git \
#refs/tags/@ANY_VERSION@