Projects
Mega:24.09
glib2
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 3
View file
_service:tar_scm:glib2.spec
Changed
@@ -1,27 +1,29 @@ Name: glib2 -Version: 2.78.3 -Release: 2 +Version: 2.78.6 +Release: 1 Summary: The core library that forms the basis for projects such as GTK+ and GNOME -License: LGPLv2+ +License: LGPL-2.1-or-later URL: https://www.gtk.org Source0: https://download.gnome.org/sources/glib/2.78/glib-%{version}.tar.xz Patch1: gspawn-eperm.patch -Patch2: backport-gmessages-fix-dropping-irrelevant-log-domains.patch -Patch3: backport-gutils-Fix-an-unlikely-minor-leak-in-g_build_user_data_dir.patch - - -Patch6001: backport-CVE-2024-34397.patch -Patch6002: backport-gdbusconnection-Allow-name-owners-to-have-the-syntax-of-a-well-known-name.patch - -BuildRequires: chrpath gcc gcc-c++ gettext perl-interpreter -BUildRequires: glibc-devel libattr-devel libselinux-devel meson -BuildRequires: systemtap-sdt-devel pkgconfig(libelf) pkgconfig(libffi) -BuildRequires: pkgconfig(libpcre2-8) pkgconfig(mount) pkgconfig(zlib) -BuildRequires: python3-devel -%ifnarch i686 -BuildRequires: desktop-file-utils shared-mime-info gtk-doc -%endif +Patch2: backport-gutils-Fix-an-unlikely-minor-leak-in-g_build_user_data_dir.patch + +BuildRequires: gcc gettext +BuildRequires: meson >= 0.60.0 +BuildRequires: pkgconfig(bash-completion) >= 2.0 +BuildRequires: pkgconfig(libelf) >= 0.8.12 +BuildRequires: pkgconfig(libffi) >= 3.0.0 +BuildRequires: pkgconfig(libpcre2-8) >= 10.32 +BuildRequires: pkgconfig(libselinux) >= 2.2 +BuildRequires: pkgconfig(mount) >= 2.23 +BuildRequires: pkgconfig(zlib) +BuildRequires: libattr-devel +BuildRequires: python3-devel +BuildRequires: gtk-doc +BuildRequires: desktop-file-utils +BuildRequires: shared-mime-info +BuildRequires: chrpath Provides: %{name}-fam = %{version}-%{release} Obsoletes: %{name}-fam < %{version}-%{release} @@ -68,7 +70,6 @@ The glib2-tests package contains tests that can be used to verify the functionality of the installed package. -%ifnarch i686 %package help Summary: help document for the glib2 package Buildarch: noarch @@ -77,18 +78,13 @@ %description help help document for the glib2 package. -%endif %prep %autosetup -n glib-%{version} -p1 %build %meson --default-library=both -Ddtrace=true \ -%ifnarch i686 -Dman=true -Dgtk_doc=true \ -%else - -Dman=false -Dgtk_doc=false \ -%endif -Dsystemtap=true -Dinstalled_tests=true \ -Dglib_debug=disabled -Dsysprof=disabled @@ -132,8 +128,7 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : %files -f glib20.lang -%defattr(-,root,root) -%doc NEWS +%doc NEWS %license COPYING %{_libdir}/*.so.* %dir %{_libdir}/gio @@ -141,6 +136,7 @@ %dir %{_datadir}/glib-2.0 %dir %{_datadir}/bash-completion +%dir %{_datadir}/bash-completion/completions %{_datadir}/bash-completion/completions/gapplication %{_datadir}/bash-completion/completions/gdbus %{_datadir}/bash-completion/completions/gio @@ -165,8 +161,8 @@ %{_datadir}/glib-2.0/* %{_datadir}/bash-completion/completions/gresource %{_datadir}/gdb/auto-load/%{_libdir}/*-gdb.py -%{_datadir}/gettext/ -%{_datadir}/systemtap/ +%{_datadir}/gettext/* +%{_datadir}/systemtap/* %{_bindir}/glib-genmarshal %{_bindir}/glib-gettextize @@ -189,14 +185,14 @@ %{_datadir}/installed-tests %exclude %{_datadir}/installed-tests/glib/tls-certificate.test -%ifnarch i686 %files help -%defattr(-,root,root) %{_mandir}/man1/* %doc %{_datadir}/gtk-doc/html/* -%endif %changelog +* Wed Jul 24 2024 Funda Wang <fundawang@yeah.net> - 2.78.6-1 +- Update to 2.78.6 + * Tue Jun 18 2024 hanhuihui <hanhuihui5@huawei.com> - 2.78.3-2 - fix CVE-2024-34397
View file
_service:tar_scm:backport-CVE-2024-34397.patch
Deleted
@@ -1,3243 +0,0 @@ -From 952852081db408259d5a546927f08e40d94701eb Mon Sep 17 00:00:00 2001 -From: Philip Withnall <pwithnall@gnome.org> -Date: Tue, 28 Nov 2023 12:58:20 +0000 -Subject: PATCH 01/17 gdbusmessage: Cache the arg0 value -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Technically we can’t rely on it being kept alive by the `message->body` -pointer, unless we can guarantee that the `GVariant` is always -serialised. That’s not necessarily the case, so keep a separate ref on -the arg0 value at all times. - -This avoids a potential use-after-free. - -Spotted by Thomas Haller in -https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3720#note_1924707. - -This is a prerequisite for having tests pass after fixing the -vulnerability described in glib#3268, because after fixing that -vulnerability, the use-after-free genuinely does happen during -regression testing. -smcv - -Signed-off-by: Philip Withnall <pwithnall@gnome.org> - -Helps: #3183, #3268 -(cherry picked from commit 10e9a917be7fb92b6b27837ef7a7f1d0be6095d5) ---- - gio/gdbusmessage.c | 35 ++++++++++++++++++++++------------- - 1 file changed, 22 insertions(+), 13 deletions(-) - -diff --git a/gio/gdbusmessage.c b/gio/gdbusmessage.c -index adddb31544..6c4a5bfbee 100644 ---- a/gio/gdbusmessage.c -+++ b/gio/gdbusmessage.c -@@ -508,6 +508,7 @@ struct _GDBusMessage - guint32 serial; - GHashTable *headers; - GVariant *body; -+ GVariant *arg0_cache; /* (nullable) (owned) */ - #ifdef G_OS_UNIX - GUnixFDList *fd_list; - #endif -@@ -530,6 +531,7 @@ g_dbus_message_finalize (GObject *object) - g_hash_table_unref (message->headers); - if (message->body != NULL) - g_variant_unref (message->body); -+ g_clear_pointer (&message->arg0_cache, g_variant_unref); - #ifdef G_OS_UNIX - if (message->fd_list != NULL) - g_object_unref (message->fd_list); -@@ -1168,6 +1170,7 @@ g_dbus_message_set_body (GDBusMessage *message, - if (body == NULL) - { - message->body = NULL; -+ message->arg0_cache = NULL; - g_dbus_message_set_signature (message, NULL); - } - else -@@ -1178,6 +1181,12 @@ g_dbus_message_set_body (GDBusMessage *message, - - message->body = g_variant_ref_sink (body); - -+ if (g_variant_is_of_type (message->body, G_VARIANT_TYPE_TUPLE) && -+ g_variant_n_children (message->body) > 0) -+ message->arg0_cache = g_variant_get_child_value (message->body, 0); -+ else -+ message->arg0_cache = NULL; -+ - type_string = g_variant_get_type_string (body); - type_string_len = strlen (type_string); - g_assert (type_string_len >= 2); -@@ -2362,6 +2371,14 @@ g_dbus_message_new_from_blob (guchar *blob, - 2, - &local_error); - g_variant_type_free (variant_type); -+ -+ if (message->body != NULL && -+ g_variant_is_of_type (message->body, G_VARIANT_TYPE_TUPLE) && -+ g_variant_n_children (message->body) > 0) -+ message->arg0_cache = g_variant_get_child_value (message->body, 0); -+ else -+ message->arg0_cache = NULL; -+ - if (message->body == NULL) - goto fail; - } -@@ -3401,22 +3418,13 @@ g_dbus_message_set_signature (GDBusMessage *message, - const gchar * - g_dbus_message_get_arg0 (GDBusMessage *message) - { -- const gchar *ret; -- - g_return_val_if_fail (G_IS_DBUS_MESSAGE (message), NULL); - -- ret = NULL; -+ if (message->arg0_cache != NULL && -+ g_variant_is_of_type (message->arg0_cache, G_VARIANT_TYPE_STRING)) -+ return g_variant_get_string (message->arg0_cache, NULL); - -- if (message->body != NULL && g_variant_is_of_type (message->body, G_VARIANT_TYPE_TUPLE)) -- { -- GVariant *item; -- item = g_variant_get_child_value (message->body, 0); -- if (g_variant_is_of_type (item, G_VARIANT_TYPE_STRING)) -- ret = g_variant_get_string (item, NULL); -- g_variant_unref (item); -- } -- -- return ret; -+ return NULL; - } - - /* ---------------------------------------------------------------------------------------------------- */ -@@ -3859,6 +3867,7 @@ g_dbus_message_copy (GDBusMessage *message, - * to just ref (as opposed to deep-copying) the GVariant instances - */ - ret->body = message->body != NULL ? g_variant_ref (message->body) : NULL; -+ ret->arg0_cache = message->arg0_cache != NULL ? g_variant_ref (message->arg0_cache) : NULL; - g_hash_table_iter_init (&iter, message->headers); - while (g_hash_table_iter_next (&iter, &header_key, (gpointer) &header_value)) - g_hash_table_insert (ret->headers, header_key, g_variant_ref (header_value)); --- -GitLab - - -From b6a68c0e42d3e28d5e6abdb364dca959720c7f99 Mon Sep 17 00:00:00 2001 -From: Simon McVittie <smcv@collabora.com> -Date: Fri, 8 Mar 2024 14:19:46 +0000 -Subject: PATCH 02/17 tests: Add a data-driven test for signal subscriptions - -This somewhat duplicates test_connection_signals(), but is easier to -extend to cover different scenarios. - -Each scenario is tested three times: once with lower-level -GDBusConnection APIs, once with the higher-level GDBusProxy (which -cannot implement all of the subscription scenarios, so some message -counts are lower), and once with both (to check that delivery of the -same message to multiple destinations is handled appropriately). - -Signed-off-by: Simon McVittie <smcv@collabora.com> ---- - gio/tests/gdbus-subscribe.c | 938 ++++++++++++++++++++++++++++++++++++ - gio/tests/meson.build | 4 + - 2 files changed, 942 insertions(+) - create mode 100644 gio/tests/gdbus-subscribe.c - -diff --git a/gio/tests/gdbus-subscribe.c b/gio/tests/gdbus-subscribe.c -new file mode 100644 -index 0000000000..3f53e1d7f8 ---- /dev/null -+++ b/gio/tests/gdbus-subscribe.c -@@ -0,0 +1,938 @@ -+/* -+ * Copyright 2024 Collabora Ltd. -+ * SPDX-License-Identifier: LGPL-2.1-or-later -+ */ -+ -+#include <gio/gio.h> -+ -+#include "gdbus-tests.h" -+ -+#define DBUS_SERVICE_DBUS "org.freedesktop.DBus" -+#define DBUS_PATH_DBUS "/org/freedesktop/DBus" -+#define DBUS_INTERFACE_DBUS DBUS_SERVICE_DBUS -+ -+/* A signal that each connection emits to indicate that it has finished -+ * emitting other signals */ -+#define FINISHED_PATH "/org/gtk/Test/Finished" -+#define FINISHED_INTERFACE "org.gtk.Test.Finished" -+#define FINISHED_SIGNAL "Finished" -+ -+/* A signal emitted during testing */ -+#define EXAMPLE_PATH "/org/gtk/GDBus/ExampleInterface" -+#define EXAMPLE_INTERFACE "org.gtk.GDBus.ExampleInterface" -+#define FOO_SIGNAL "Foo" -+ -+/* Log @s in a debug message. */ -+static inline const char * -+nonnull (const char *s, -+ const char *if_null) -+{ -+ return (s == NULL) ? if_null : s; -+} -+ -+typedef enum -+{ -+ TEST_CONN_NONE, -+ TEST_CONN_FIRST, -+ /* A connection that subscribes to signals */ -+ TEST_CONN_SUBSCRIBER = TEST_CONN_FIRST, -+ /* A mockup of a legitimate service */ -+ TEST_CONN_SERVICE, -+ /* A mockup of a second legitimate service */ -+ TEST_CONN_SERVICE2, -+ /* A connection that tries to trick @subscriber into processing its signals -+ * as if they came from @service */ -+ TEST_CONN_ATTACKER, -+ NUM_TEST_CONNS
View file
_service:tar_scm:backport-gdbusconnection-Allow-name-owners-to-have-the-syntax-of-a-well-known-name.patch
Deleted
@@ -1,59 +0,0 @@ -From c1ddca0955619cab194be2b22915c562e94f8852 Mon Sep 17 00:00:00 2001 -From: Simon McVittie <smcv@collabora.com> -Date: Wed, 8 May 2024 14:46:08 +0000 -Subject: PATCH gdbusconnection: Allow name owners to have the syntax of a - well-known name - -In a D-Bus-Specification-compliant message bus, the owner of a well-known -name is a unique name. However, ibus has its own small implementation -of a message bus (src/ibusbus.c) in which org.freedesktop.IBus is -special-cased to also have itself as its owner (like org.freedesktop.DBus -on a standard message bus), and connects to that bus with the -G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION flag. The ability to do -this regressed when CVE-2024-34397 was fixed. - -Relax the checks to allow the owner of a well-known name to be any valid -D-Bus name, even if it is not syntactically a unique name. - -Fixes: 683b14b9 "gdbus: Track name owners for signal subscriptions" -Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/3353 -Bug-Debian: https://bugs.debian.org/1070730 -Bug-Debian: https://bugs.debian.org/1070736 -Bug-Debian: https://bugs.debian.org/1070743 -Bug-Debian: https://bugs.debian.org/1070745 -Signed-off-by: Simon McVittie <smcv@debian.org> ---- - gio/gdbusconnection.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c -index 782caff0aa..bd0cd1b0eb 100644 ---- a/gio/gdbusconnection.c -+++ b/gio/gdbusconnection.c -@@ -2402,7 +2402,10 @@ name_watcher_deliver_name_owner_changed_unlocked (SignalData *name_watcher, - /* Our caller already checked this */ - g_assert (g_strcmp0 (name_watcher->arg0, name) == 0); - -- if (G_LIKELY (new_owner0 == '\0' || g_dbus_is_unique_name (new_owner))) -+ /* FIXME: This should be validating that `new_owner` is a unique name, -+ * but IBus’ implementation of a message bus is not compliant with the spec. -+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/3353 */ -+ if (G_LIKELY (new_owner0 == '\0' || g_dbus_is_name (new_owner))) - name_watcher_set_name_owner_unlocked (name_watcher, new_owner); - else - g_warning ("Received NameOwnerChanged signal with invalid owner \"%s\" for \"%s\"", -@@ -2454,7 +2457,10 @@ name_watcher_deliver_get_name_owner_reply_unlocked (SignalData *name_watcher, - - g_variant_get (body, "(&s)", &new_owner); - -- if (G_LIKELY (g_dbus_is_unique_name (new_owner))) -+ /* FIXME: This should be validating that `new_owner` is a unique name, -+ * but IBus’ implementation of a message bus is not compliant with the spec. -+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/3353 */ -+ if (G_LIKELY (g_dbus_is_name (new_owner))) - name_watcher_set_name_owner_unlocked (name_watcher, new_owner); - else - g_warning ("Received GetNameOwner reply with invalid owner \"%s\" for \"%s\"", --- -GitLab -
View file
_service:tar_scm:backport-gmessages-fix-dropping-irrelevant-log-domains.patch
Deleted
@@ -1,128 +0,0 @@ -From 71f6d4c129fc729a5ead08637924d8c0973f2fe9 Mon Sep 17 00:00:00 2001 -From: Alexander Slobodeniuk <aslobodeniuk@fluendo.com> -Date: Wed, 1 Nov 2023 10:32:27 +0100 -Subject: PATCH 1/2 gmessages: fix dropping irrelevant log domains - -If the string of one log domain is contained in -another, it was printing both. - -For example, if G_MESSAGES_DEBUG is "Gtkspecial", -it would also keep the logs of the "Gtk" domain - -Conflict:NA -Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/71f6d4c129fc729a5ead08637924d8c0973f2fe9 - ---- - glib/gmessages.c | 22 +++++++++++++++++++++- - 1 file changed, 21 insertions(+), 1 deletion(-) - -diff --git a/glib/gmessages.c b/glib/gmessages.c -index d0d38c925a..ebd3a5433e 100644 ---- a/glib/gmessages.c -+++ b/glib/gmessages.c -@@ -2465,6 +2465,26 @@ log_is_old_api (const GLogField *fields, - g_strcmp0 (fields0.value, "1") == 0); - } - -+static gboolean -+domain_found (const gchar *domains, -+ const char *log_domain) -+{ -+ guint len; -+ const gchar *found; -+ -+ len = strlen (log_domain); -+ -+ for (found = strstr (domains, log_domain); found; -+ found = strstr (found + 1, log_domain)) -+ { -+ if ((found == domains || found-1 == ' ') -+ && (foundlen == 0 || foundlen == ' ')) -+ return TRUE; -+ } -+ -+ return FALSE; -+} -+ - /* - * Internal version of g_log_writer_default_would_drop(), which can - * read from either a log_domain or an array of fields. This avoids -@@ -2504,7 +2524,7 @@ should_drop_message (GLogLevelFlags log_level, - } - - if (strcmp (domains, "all") != 0 && -- (log_domain == NULL || !strstr (domains, log_domain))) -+ (log_domain == NULL || !domain_found (domains, log_domain))) - return TRUE; - } - --- -GitLab - - -From 8eddbb9832b9a52a7495cc380e53715d920bb9ea Mon Sep 17 00:00:00 2001 -From: Alexander Slobodeniuk <aslobodeniuk@fluendo.com> -Date: Wed, 1 Nov 2023 19:23:35 +0100 -Subject: PATCH 2/2 glib/tests: extend logging test (dropping domains) - - -Conflict:NA -Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/8eddbb9832b9a52a7495cc380e53715d920bb9ea - ---- - glib/tests/logging.c | 40 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 40 insertions(+) - -diff --git a/glib/tests/logging.c b/glib/tests/logging.c -index ea9dcb825e..f4c47e16c8 100644 ---- a/glib/tests/logging.c -+++ b/glib/tests/logging.c -@@ -244,6 +244,46 @@ test_default_handler_would_drop (void) - g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); - g_assert_false (g_log_writer_default_would_drop (1<<G_LOG_LEVEL_USER_SHIFT, "foo")); - -+ g_setenv ("G_MESSAGES_DEBUG", "foobar", TRUE); -+ -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "bar")); -+ -+ g_setenv ("G_MESSAGES_DEBUG", "foobar bar", TRUE); -+ -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "bar")); -+ -+ g_setenv ("G_MESSAGES_DEBUG", "foobar bar barfoo", TRUE); -+ -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "bar")); -+ -+ g_setenv ("G_MESSAGES_DEBUG", "foobar bar foo barfoo", TRUE); -+ -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "bar")); -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "baz")); -+ -+ g_setenv ("G_MESSAGES_DEBUG", "foo bar baz", TRUE); -+ -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "bar")); -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "baz")); -+ -+ g_setenv ("G_MESSAGES_DEBUG", "foo", TRUE); -+ -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "bar")); -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foobarbaz")); -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "barfoobaz")); -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "barbazfoo")); -+ -+ g_setenv ("G_MESSAGES_DEBUG", " foo bar foobaz ", TRUE); -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "foo")); -+ g_assert_false (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "bar")); -+ g_assert_true (g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, "baz")); -+ - exit (0); - } - --- -GitLab \ No newline at end of file
View file
_service:tar_scm:glib-2.78.3.tar.xz/.gitlab-ci.yml -> _service:tar_scm:glib-2.78.6.tar.xz/.gitlab-ci.yml
Changed
@@ -329,6 +329,7 @@ - _build/gobject/libgobject-2.0-0.dll msys2-mingw32: + allow_failure: true extends: .only-default stage: build tags: @@ -360,6 +361,7 @@ - _coverage/ msys2-clang64: + allow_failure: true extends: .only-schedules stage: build tags: @@ -444,52 +446,6 @@ paths: - _build/meson-logs -freebsd-12-x86_64: - # The FreeBSD 13 build is run on each commit, so the FreeBSD 12 build can be - # run less regularly to save CI resources. The chance of a regression on - # FreeBSD 12 and not FreeBSD 13 is tiny. - extends: .only-schedules - stage: build - tags: - # To run a FreeBSD builder, install gitlab-runner package and start both - # gitlab-runner and dbus service because we need /var/lib/dbus/machine-id. - # To compile GLib, you still have to install the following packages: - # desktop-file-utils gettext libiconv meson pkgconf python3 shared-mime-info - - freebsd-12 - needs: - variables: - # CPPFLAGS is required because libintl doesn't use pkg-config. - CPPFLAGS: -I/usr/local/include - # FIXME: Workaround meson inability to set LD_LIBRARY_PATH. - # https://github.com/mesonbuild/meson/issues/1383 - # https://github.com/mesonbuild/meson/issues/1635 - # https://github.com/mesonbuild/meson/issues/2881 - LDFLAGS: -L/usr/local/lib -Wl,--disable-new-dtags - # FreeBSD supports C.UTF-8 locale since 12.1. - LANG: C.UTF-8 - before_script: - - bash .gitlab-ci/show-execution-environment.sh - script: - # We cannot use -Wl,--no-undefined because GLib uses 'environ' variable. - # FreeBSD supports xattr, but its API is different from Linux xattr. - # FIXME: extattr(2) support: https://gitlab.gnome.org/GNOME/glib/issues/1404 - # localstatedir is needed for access to /var/lib/dbus/machine-id - - meson setup ${MESON_COMMON_OPTIONS} --localstatedir=/var -Db_lundef=false -Dxattr=false _build - - meson compile -C _build - - bash -x ./.gitlab-ci/run-tests.sh - artifacts: - reports: - junit: - - _build/meson-logs/testlog.junit.xml - - _build/meson-logs/testlog-*.junit.xml - name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" - when: always - expire_in: 1 week - paths: - - "_build/config.h" - - "_build/glib/glibconfig.h" - - "_build/meson-logs" - freebsd-13-x86_64: extends: .only-origin stage: build @@ -503,7 +459,14 @@ before_script: - bash .gitlab-ci/show-execution-environment.sh script: - - meson setup ${MESON_COMMON_OPTIONS} --localstatedir=/var -Db_lundef=false -Dxattr=false _build + # FIXME: We can’t use ${MESON_COMMON_OPTIONS} here because the FreeBSD 13 + # runner has Meson 1.3 installed. This has an API hole where previous + # methods of getting paths from files() objects are rejected as deprecated, + # but no replacements are available. Hence, we can’t build with + # --fatal-meson-warnings. This should be fixed in Meson 1.4. It’s also fine + # with Meson 1.2.3 (which is what we use on all the other CI runners). + # See https://github.com/GNOME/glib/commit/71061fdcb33b8c26f5f8467cb3ac10704d65c87d + - meson setup --buildtype debug --wrap-mode=nodownload --localstatedir=/var -Db_lundef=false -Dxattr=false _build - meson compile -C _build - bash -x ./.gitlab-ci/run-tests.sh artifacts:
View file
_service:tar_scm:glib-2.78.3.tar.xz/NEWS -> _service:tar_scm:glib-2.78.6.tar.xz/NEWS
Changed
@@ -1,3 +1,51 @@ +Overview of changes in GLib 2.78.6, 2024-05-08 +============================================== + +* Fix a regression with IBus caused by the fix for CVE-2024-34397 (#3353, + work by Simon McVittie) + +* Bugs fixed: + - #3353 Fixing CVE-2024-34397 caused regressions for ibus (Simon McVittie) + - !4056 Backport !4053 “gdbusconnection: Allow name owners to have the syntax + of a well-known name” to glib-2-78 + +Overview of changes in GLib 2.78.5, 2024-05-07 +============================================== + +* Fix CVE-2024-34397: GDBus signal subscriptions for well-known names are + vulnerable to unicast spoofing (#3268, work by Simon McVittie, reported by + Alicia Boya García) + +* Bugs fixed: + - #3168 gvfs-udisks2-volume-monitor SIGSEGV in g_content_type_guess_for_tree() + due to filename with bad encoding (Ondrej Holy) + - #3268 CVE-2024-34397: GDBus signal subscriptions for well-known names are + vulnerable to unicast spoofing (Simon McVittie) + - !3825 glib-2-78: ci: Drop FreeBSD 12 CI runner as it’s EOL + - !3960 gcontenttype: Make filename valid utf-8 string before processing + - !4040 Backport !4038 “gdbusconnection: Don't deliver signals if the sender + doesn't match” to glib-2-78 + - !4043 CI: Ignore MSYS2 CI failures for this older stable-branch + +* Translation updates: + - English (United Kingdom) (Andi Chandler) + - Georgian (Ekaterine Papava) + - Portuguese (Brazil) (Juliano de Souza Camargo) + + +Overview of changes in GLib 2.78.4, 2024-01-21 +============================================== + +* Bugs fixed: + - !3754 Backport !3751 “Fix generated RST anchors for methods, signals and + properties” to glib-2-78 + - !3756 docs/reference: depend on a native gtk-doc + - !3759 Backport !3753 “gobject_gdb.py: Do not break bt on optimized build” to + glib-2-78 + - !3766 Backport !3750 “gregex: clean up usage of _GRegex.jit_status” to + glib-2-78 + + Overview of changes in GLib 2.78.3, 2023-12-06 ==============================================
View file
_service:tar_scm:glib-2.78.3.tar.xz/docs/reference/meson.build -> _service:tar_scm:glib-2.78.6.tar.xz/docs/reference/meson.build
Changed
@@ -42,7 +42,7 @@ if get_option('gtk_doc') # Check we have the minimum gtk-doc version required. Older versions won't # generate correct documentation. - dependency('gtk-doc', version : '>=1.32.1', + dependency('gtk-doc', version : '>=1.32.1', native: true, fallback : 'gtk-doc', 'dummy_dep', default_options : 'tests=false')
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/gcontenttype.c -> _service:tar_scm:glib-2.78.6.tar.xz/gio/gcontenttype.c
Changed
@@ -1276,7 +1276,7 @@ gint depth, const gchar *name) { - gchar *case_folded, *key; + gchar *case_folded, *key, *utf8_name; gboolean found; if (strcmp (name, e->componentsdepth) == 0) @@ -1285,11 +1285,16 @@ if (!e->ignore_case) return FALSE; - case_folded = g_utf8_casefold (name, -1); + utf8_name = g_filename_to_utf8 (name, -1, NULL, NULL, NULL); + if (utf8_name == NULL) + utf8_name = g_utf8_make_valid (name, -1); + + case_folded = g_utf8_casefold (utf8_name, -1); key = g_utf8_collate_key (case_folded, -1); found = strcmp (key, e->case_componentsdepth) == 0; + g_free (utf8_name); g_free (case_folded); g_free (key);
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/gdbus-2.0/codegen/codegen_rst.py -> _service:tar_scm:glib-2.78.6.tar.xz/gio/gdbus-2.0/codegen/codegen_rst.py
Changed
@@ -142,7 +142,7 @@ else: access = "readable" res += - ".. _{title}:", + f".. _{title}:", "", title, "^" * len(title), @@ -218,7 +218,7 @@ for m in iface.methods: title = f"{iface.name}.{m.name}" res += - ".. _{title}:", + f".. _{title}:", "", title, "^" * len(title), @@ -296,7 +296,7 @@ for s in iface.signals: title = f"{iface.name}::{s.name}" res += - ".. _{title}:", + f".. _{title}:", "", title, "^" * len(title),
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/gdbusconnection.c -> _service:tar_scm:glib-2.78.6.tar.xz/gio/gdbusconnection.c
Changed
@@ -284,6 +284,153 @@ /* ---------------------------------------------------------------------------------------------------- */ +typedef struct +{ + /* All fields are immutable after construction. */ + gatomicrefcount ref_count; + GDBusSignalCallback callback; + gpointer user_data; + GDestroyNotify user_data_free_func; + guint id; + GMainContext *context; +} SignalSubscriber; + +static SignalSubscriber * +signal_subscriber_ref (SignalSubscriber *subscriber) +{ + g_atomic_ref_count_inc (&subscriber->ref_count); + return subscriber; +} + +static void +signal_subscriber_unref (SignalSubscriber *subscriber) +{ + if (g_atomic_ref_count_dec (&subscriber->ref_count)) + { + /* Destroy the user data. It doesn’t matter which thread + * signal_subscriber_unref() is called in (or whether it’s called with a + * lock held), as call_destroy_notify() always defers to the next + * #GMainContext iteration. */ + call_destroy_notify (subscriber->context, + subscriber->user_data_free_func, + subscriber->user_data); + + g_main_context_unref (subscriber->context); + g_free (subscriber); + } +} + +typedef struct +{ + /* + * 1 reference while waiting for GetNameOwner() to finish + * 1 reference for each SignalData that points to this one as its + * shared_name_watcher + */ + grefcount ref_count; + + gchar *owner; + guint32 get_name_owner_serial; +} WatchedName; + +static WatchedName * +watched_name_new (void) +{ + WatchedName *watched_name = g_new0 (WatchedName, 1); + + g_ref_count_init (&watched_name->ref_count); + watched_name->owner = NULL; + return g_steal_pointer (&watched_name); +} + +typedef struct SignalData SignalData; + +struct SignalData +{ + gchar *rule; + gchar *sender; + gchar *interface_name; + gchar *member; + gchar *object_path; + gchar *arg0; + GDBusSignalFlags flags; + GPtrArray *subscribers; /* (owned) (element-type SignalSubscriber) */ + + /* + * If the sender is a well-known name, this is an unowned SignalData + * representing the NameOwnerChanged signal that tracks its owner. + * NULL if sender is NULL. + * NULL if sender is its own owner (a unique name or DBUS_SERVICE_DBUS). + * + * Invariants: if not NULL, then + * shared_name_watcher->sender == DBUS_SERVICE_DBUS + * shared_name_watcher->interface_name == DBUS_INTERFACE_DBUS + * shared_name_watcher->member == "NameOwnerChanged" + * shared_name_watcher->object_path == DBUS_PATH_DBUS + * shared_name_watcher->arg0 == sender + * shared_name_watcher->flags == NONE + * shared_name_watcher->watched_name == NULL + */ + SignalData *shared_name_watcher; + + /* + * Non-NULL if this SignalData is another SignalData's shared_name_watcher. + * One reference for each SignalData that has this one as its + * shared_name_watcher. + * Otherwise NULL. + */ + WatchedName *watched_name; +}; + +static SignalData * +signal_data_new_take (gchar *rule, + gchar *sender, + gchar *interface_name, + gchar *member, + gchar *object_path, + gchar *arg0, + GDBusSignalFlags flags) +{ + SignalData *signal_data = g_new0 (SignalData, 1); + + signal_data->rule = rule; + signal_data->sender = sender; + signal_data->interface_name = interface_name; + signal_data->member = member; + signal_data->object_path = object_path; + signal_data->arg0 = arg0; + signal_data->flags = flags; + signal_data->subscribers = g_ptr_array_new_with_free_func ((GDestroyNotify) signal_subscriber_unref); + return g_steal_pointer (&signal_data); +} + +static void +signal_data_free (SignalData *signal_data) +{ + /* The SignalData should not be freed while it still has subscribers */ + g_assert (signal_data->subscribers->len == 0); + + /* The SignalData should not be freed while it is watching for + * NameOwnerChanged on behalf of another SignalData */ + g_assert (signal_data->watched_name == NULL); + + /* The SignalData should be detached from its name watcher, if any, + * before it is freed */ + g_assert (signal_data->shared_name_watcher == NULL); + + g_free (signal_data->rule); + g_free (signal_data->sender); + g_free (signal_data->interface_name); + g_free (signal_data->member); + g_free (signal_data->object_path); + g_free (signal_data->arg0); + g_ptr_array_unref (signal_data->subscribers); + + g_free (signal_data); +} + +/* ---------------------------------------------------------------------------------------------------- */ + #ifdef G_OS_WIN32 #define CONNECTION_ENSURE_LOCK(obj) do { ; } while (FALSE) #else @@ -410,6 +557,7 @@ /* Map used for managing method replies, protected by @lock */ GHashTable *map_method_serial_to_task; /* guint32 -> owned GTask* */ + GHashTable *map_method_serial_to_name_watcher; /* guint32 -> unowned SignalData* */ /* Maps used for managing signal subscription, protected by @lock */ GHashTable *map_rule_to_signal_data; /* match rule (gchar*) -> SignalData */ @@ -658,6 +806,7 @@ g_error_free (connection->initialization_error); g_hash_table_unref (connection->map_method_serial_to_task); + g_hash_table_unref (connection->map_method_serial_to_name_watcher); g_hash_table_unref (connection->map_rule_to_signal_data); g_hash_table_unref (connection->map_id_to_signal_data); @@ -1062,6 +1211,7 @@ g_mutex_init (&connection->init_lock); connection->map_method_serial_to_task = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); + connection->map_method_serial_to_name_watcher = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); connection->map_rule_to_signal_data = g_hash_table_new (g_str_hash, g_str_equal); @@ -2189,6 +2339,197 @@ /* ---------------------------------------------------------------------------------------------------- */ +/* + * Called in any thread. + * Must hold the connection lock when calling this, unless + * connection->finalizing is TRUE. + */ +static void +name_watcher_unref_watched_name (GDBusConnection *connection, + SignalData *name_watcher) +{ + WatchedName *watched_name = name_watcher->watched_name; + + g_assert (watched_name != NULL); + + if (!g_ref_count_dec (&watched_name->ref_count)) + return; + + /* Removing watched_name from the name_watcher may result in + * name_watcher being freed, so we must make sure name_watcher is no
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/gdbusmessage.c -> _service:tar_scm:glib-2.78.6.tar.xz/gio/gdbusmessage.c
Changed
@@ -508,6 +508,7 @@ guint32 serial; GHashTable *headers; GVariant *body; + GVariant *arg0_cache; /* (nullable) (owned) */ #ifdef G_OS_UNIX GUnixFDList *fd_list; #endif @@ -530,6 +531,7 @@ g_hash_table_unref (message->headers); if (message->body != NULL) g_variant_unref (message->body); + g_clear_pointer (&message->arg0_cache, g_variant_unref); #ifdef G_OS_UNIX if (message->fd_list != NULL) g_object_unref (message->fd_list); @@ -1168,6 +1170,7 @@ if (body == NULL) { message->body = NULL; + message->arg0_cache = NULL; g_dbus_message_set_signature (message, NULL); } else @@ -1178,6 +1181,12 @@ message->body = g_variant_ref_sink (body); + if (g_variant_is_of_type (message->body, G_VARIANT_TYPE_TUPLE) && + g_variant_n_children (message->body) > 0) + message->arg0_cache = g_variant_get_child_value (message->body, 0); + else + message->arg0_cache = NULL; + type_string = g_variant_get_type_string (body); type_string_len = strlen (type_string); g_assert (type_string_len >= 2); @@ -2362,6 +2371,14 @@ 2, &local_error); g_variant_type_free (variant_type); + + if (message->body != NULL && + g_variant_is_of_type (message->body, G_VARIANT_TYPE_TUPLE) && + g_variant_n_children (message->body) > 0) + message->arg0_cache = g_variant_get_child_value (message->body, 0); + else + message->arg0_cache = NULL; + if (message->body == NULL) goto fail; } @@ -3401,22 +3418,13 @@ const gchar * g_dbus_message_get_arg0 (GDBusMessage *message) { - const gchar *ret; - g_return_val_if_fail (G_IS_DBUS_MESSAGE (message), NULL); - ret = NULL; + if (message->arg0_cache != NULL && + g_variant_is_of_type (message->arg0_cache, G_VARIANT_TYPE_STRING)) + return g_variant_get_string (message->arg0_cache, NULL); - if (message->body != NULL && g_variant_is_of_type (message->body, G_VARIANT_TYPE_TUPLE)) - { - GVariant *item; - item = g_variant_get_child_value (message->body, 0); - if (g_variant_is_of_type (item, G_VARIANT_TYPE_STRING)) - ret = g_variant_get_string (item, NULL); - g_variant_unref (item); - } - - return ret; + return NULL; } /* ---------------------------------------------------------------------------------------------------- */ @@ -3859,6 +3867,7 @@ * to just ref (as opposed to deep-copying) the GVariant instances */ ret->body = message->body != NULL ? g_variant_ref (message->body) : NULL; + ret->arg0_cache = message->arg0_cache != NULL ? g_variant_ref (message->arg0_cache) : NULL; g_hash_table_iter_init (&iter, message->headers); while (g_hash_table_iter_next (&iter, &header_key, (gpointer) &header_value)) g_hash_table_insert (ret->headers, header_key, g_variant_ref (header_value));
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/gdbusprivate.h -> _service:tar_scm:glib-2.78.6.tar.xz/gio/gdbusprivate.h
Changed
@@ -27,6 +27,11 @@ G_BEGIN_DECLS +/* Bus name, interface and object path of the message bus itself */ +#define DBUS_SERVICE_DBUS "org.freedesktop.DBus" +#define DBUS_INTERFACE_DBUS DBUS_SERVICE_DBUS +#define DBUS_PATH_DBUS "/org/freedesktop/DBus" + /* ---------------------------------------------------------------------------------------------------- */ typedef struct GDBusWorker GDBusWorker;
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/tests/codegen.py -> _service:tar_scm:glib-2.78.6.tar.xz/gio/tests/codegen.py
Changed
@@ -28,6 +28,7 @@ import subprocess import sys import tempfile +import textwrap import unittest import xml.etree.ElementTree as ET @@ -519,6 +520,138 @@ rst = f.readlines() self.assertTrue(len(rst) != 0) + def test_generate_rst_method(self): + """Test generating a method documentation with the rst generator.""" + xml_contents = """ + <node> + <interface name="org.project.Bar.Frobnicator"> + <!-- RandomMethod: + + A random test method. + --> + <method name="RandomMethod"/> + </interface> + </node> + """ + res = self.runCodegenWithInterface( + xml_contents, + "--generate-rst", + "test", + ) + self.assertEqual("", res.err) + self.assertEqual("", res.out) + with open("test-org.project.Bar.Frobnicator.rst", "r") as f: + rst = f.read() + self.assertIn( + textwrap.dedent( + """ + ------- + Methods + ------- + + .. _org.project.Bar.Frobnicator.RandomMethod: + + org.project.Bar.Frobnicator.RandomMethod + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + :: + + RandomMethod () + + + A random test method.""" + ), + rst, + ) + + def test_generate_rst_signal(self): + """Test generating a signal documentation with the rst generator.""" + xml_contents = """ + <node> + <interface name="org.project.Bar.Frobnicator"> + <!-- RandomSignal: + + A random test signal. + --> + <signal name="RandomSignal"/> + </interface> + </node> + """ + res = self.runCodegenWithInterface( + xml_contents, + "--generate-rst", + "test", + ) + self.assertEqual("", res.err) + self.assertEqual("", res.out) + with open("test-org.project.Bar.Frobnicator.rst", "r") as f: + rst = f.read() + self.assertIn( + textwrap.dedent( + """ + ------- + Signals + ------- + + .. _org.project.Bar.Frobnicator::RandomSignal: + + org.project.Bar.Frobnicator::RandomSignal + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + :: + + RandomSignal () + + + A random test signal.""" + ), + rst, + ) + + def test_generate_rst_property(self): + """Test generating a property documentation with the rst generator.""" + xml_contents = """ + <node> + <interface name="org.project.Bar.Frobnicator"> + <!-- RandomProperty: + + A random test property. + --> + <property type="s" name="RandomProperty" access="read"/> + </interface> + </node> + """ + res = self.runCodegenWithInterface( + xml_contents, + "--generate-rst", + "test", + ) + self.assertEqual("", res.err) + self.assertEqual("", res.out) + with open("test-org.project.Bar.Frobnicator.rst", "r") as f: + rst = f.read() + self.assertIn( + textwrap.dedent( + """ + ---------- + Properties + ---------- + + .. _org.project.Bar.Frobnicator:RandomProperty: + + org.project.Bar.Frobnicator:RandomProperty + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + :: + + RandomProperty readable s + + + A random test property.""" + ), + rst, + ) + @unittest.skipIf(on_win32(), "requires /dev/stdout") def test_glib_min_required_invalid(self): """Test running with an invalid --glib-min-required."""
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/tests/gdbus-proxy.c -> _service:tar_scm:glib-2.78.6.tar.xz/gio/tests/gdbus-proxy.c
Changed
@@ -780,6 +780,12 @@ while (!name_disappeared) g_main_context_iteration (NULL, TRUE); + /* GDBusConnection doesn't guarantee that different subscriptions to the + * same signal will get their callbacks scheduled in any particular order, + * so make sure they have all happened */ + while (g_main_context_iteration (NULL, FALSE)) + continue; + g_bus_unwatch_name (watch_id); #else g_warning ("Can't kill com.example.TestService");
View file
_service:tar_scm:glib-2.78.6.tar.xz/gio/tests/gdbus-subscribe.c
Added
@@ -0,0 +1,1342 @@ +/* + * Copyright 2024 Collabora Ltd. + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include <gio/gio.h> + +#include "gdbus-tests.h" + +/* From the D-Bus Specification */ +#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 + +#define DBUS_SERVICE_DBUS "org.freedesktop.DBus" +#define DBUS_PATH_DBUS "/org/freedesktop/DBus" +#define DBUS_INTERFACE_DBUS DBUS_SERVICE_DBUS +#define NAME_OWNER_CHANGED "NameOwnerChanged" + +/* A signal that each connection emits to indicate that it has finished + * emitting other signals */ +#define FINISHED_PATH "/org/gtk/Test/Finished" +#define FINISHED_INTERFACE "org.gtk.Test.Finished" +#define FINISHED_SIGNAL "Finished" + +/* A signal emitted during testing */ +#define EXAMPLE_PATH "/org/gtk/GDBus/ExampleInterface" +#define EXAMPLE_INTERFACE "org.gtk.GDBus.ExampleInterface" +#define FOO_SIGNAL "Foo" + +#define ALREADY_OWNED_NAME "org.gtk.Test.AlreadyOwned" +#define OWNED_LATER_NAME "org.gtk.Test.OwnedLater" + +/* Log @s in a debug message. */ +static inline const char * +nonnull (const char *s, + const char *if_null) +{ + return (s == NULL) ? if_null : s; +} + +typedef enum +{ + TEST_CONN_NONE, + TEST_CONN_FIRST, + /* A connection that subscribes to signals */ + TEST_CONN_SUBSCRIBER = TEST_CONN_FIRST, + /* A mockup of a legitimate service */ + TEST_CONN_SERVICE, + /* A mockup of a second legitimate service */ + TEST_CONN_SERVICE2, + /* A connection that tries to trick @subscriber into processing its signals + * as if they came from @service */ + TEST_CONN_ATTACKER, + NUM_TEST_CONNS +} TestConn; + +static const char * const test_conn_descriptionsNUM_TEST_CONNS = +{ + "(unused)", + "subscriber", + "service", + "service 2", + "attacker" +}; + +typedef enum +{ + SUBSCRIPTION_MODE_CONN, + SUBSCRIPTION_MODE_PROXY, + SUBSCRIPTION_MODE_PARALLEL +} SubscriptionMode; + +typedef struct +{ + GDBusProxy *received_by_proxy; + TestConn sender; + char *path; + char *iface; + char *member; + GVariant *parameters; + char *arg0; + guint32 step; +} ReceivedMessage; + +static void +received_message_free (ReceivedMessage *self) +{ + + g_clear_object (&self->received_by_proxy); + g_free (self->path); + g_free (self->iface); + g_free (self->member); + g_clear_pointer (&self->parameters, g_variant_unref); + g_free (self->arg0); + g_free (self); +} + +typedef struct +{ + TestConn sender; + TestConn unicast_to; + const char *path; + const char *iface; + const char *member; + const char *arg0; + const char *args; + guint received_by_conn; + guint received_by_proxy; +} TestEmitSignal; + +typedef struct +{ + const char *string_sender; + TestConn unique_sender; + const char *path; + const char *iface; + const char *member; + const char *arg0; + GDBusSignalFlags flags; + gboolean unsubscribe_immediately; +} TestSubscribe; + +typedef struct +{ + const char *name; + TestConn owner; + guint received_by_conn; + guint received_by_proxy; +} TestOwnName; + +typedef enum +{ + TEST_ACTION_NONE = 0, + TEST_ACTION_SUBSCRIBE, + TEST_ACTION_EMIT_SIGNAL, + TEST_ACTION_OWN_NAME, +} TestAction; + +typedef struct +{ + TestAction action; + union { + TestEmitSignal signal; + TestSubscribe subscribe; + TestOwnName own_name; + guint unsubscribe_undo_step; + } u; +} TestStep; + +/* Arbitrary, extend as necessary to accommodate the longest test */ +#define MAX_TEST_STEPS 10 + +typedef struct +{ + const char *description; + TestStep stepsMAX_TEST_STEPS; +} TestPlan; + +static const TestPlan plan_simple = +{ + .description = "A broadcast is only received after subscribing to it", + .steps = { + { + /* We don't receive a signal if we haven't subscribed yet */ + .action = TEST_ACTION_EMIT_SIGNAL, + .u.signal = { + .sender = TEST_CONN_SERVICE, + .path = EXAMPLE_PATH, + .iface = EXAMPLE_INTERFACE, + .member = FOO_SIGNAL, + .received_by_conn = 0, + .received_by_proxy = 0 + }, + }, + { + .action = TEST_ACTION_SUBSCRIBE, + .u.subscribe = { + .path = EXAMPLE_PATH, + .iface = EXAMPLE_INTERFACE, + }, + }, + { + /* Now it works */ + .action = TEST_ACTION_EMIT_SIGNAL, + .u.signal = { + .sender = TEST_CONN_SERVICE, + .path = EXAMPLE_PATH, + .iface = EXAMPLE_INTERFACE, + .member = FOO_SIGNAL, + .received_by_conn = 1, + /* The proxy can't be used in this case, because it needs + * a bus name to subscribe to */ + .received_by_proxy = 0 + }, + }, + }, +}; + +static const TestPlan plan_broadcast_from_anyone = +{
View file
_service:tar_scm:glib-2.78.3.tar.xz/gio/tests/meson.build -> _service:tar_scm:glib-2.78.6.tar.xz/gio/tests/meson.build
Changed
@@ -463,6 +463,10 @@ 'extra_sources' : extra_sources, 'extra_programs': extra_programs, }, + 'gdbus-subscribe' : { + 'extra_sources' : extra_sources, + 'extra_programs': extra_programs, + }, 'gdbus-test-codegen' : { 'extra_sources' : extra_sources, gdbus_test_codegen_generated, gdbus_test_codegen_generated_interface_info, 'c_args' : '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32',
View file
_service:tar_scm:glib-2.78.3.tar.xz/glib/gregex.c -> _service:tar_scm:glib-2.78.6.tar.xz/glib/gregex.c
Changed
@@ -253,6 +253,13 @@ GRegexMatchFlags orig_match_opts; /* options used as default match options, gregex values */ uint32_t jit_options; /* options which were enabled for jit compiler */ JITStatus jit_status; /* indicates the status of jit compiler for this compiled regex */ + /* The jit_status here does _not_ correspond to whether we used the JIT in the last invocation, + * which may be affected by match_options or a JIT_STACK_LIMIT error, but whether it was ever + * enabled for the current regex AND current set of jit_options. + * JIT_STATUS_DEFAULT means enablement was never tried, + * JIT_STATUS_ENABLED means it was tried and successful (even if we're not currently using it), + * and JIT_STATUS_DISABLED means it was tried and failed (so we shouldn't try again). + */ }; /* TRUE if ret is an error code, FALSE otherwise. */ @@ -919,35 +926,47 @@ /* no new options enabled */ if (new_jit_options == old_jit_options) - return match_info->regex->jit_status; + { + g_assert (match_info->regex->jit_status != JIT_STATUS_DEFAULT); + return match_info->regex->jit_status; + } retval = pcre2_jit_compile (match_info->regex->pcre_re, new_jit_options); - switch (retval) + if (retval == 0) { - case 0: /* JIT enabled successfully */ + match_info->regex->jit_status = JIT_STATUS_ENABLED; + match_info->regex->jit_options = new_jit_options; /* Set min stack size for JIT to 32KiB and max to 512KiB */ match_info->jit_stack = pcre2_jit_stack_create (1 << 15, 1 << 19, NULL); pcre2_jit_stack_assign (match_info->match_context, NULL, match_info->jit_stack); - return JIT_STATUS_ENABLED; - case PCRE2_ERROR_NOMEMORY: - g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, " - "but JIT was unable to allocate executable memory for the " - "compiler. Falling back to interpretive code."); - return JIT_STATUS_DISABLED; - case PCRE2_ERROR_JIT_BADOPTION: - g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, " - "but JIT support is not available. Falling back to " - "interpretive code."); - return JIT_STATUS_DISABLED; - break; - default: - g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, " - "but request for JIT support had unexpectedly failed (error %d). " - "Falling back to interpretive code.", retval); - return JIT_STATUS_DISABLED; - break; } + else + { + match_info->regex->jit_status = JIT_STATUS_DISABLED; + + switch (retval) + { + case PCRE2_ERROR_NOMEMORY: + g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, " + "but JIT was unable to allocate executable memory for the " + "compiler. Falling back to interpretive code."); + break; + case PCRE2_ERROR_JIT_BADOPTION: + g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, " + "but JIT support is not available. Falling back to " + "interpretive code."); + break; + default: + g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, " + "but request for JIT support had unexpectedly failed (error %d). " + "Falling back to interpretive code.", + retval); + break; + } + } + + return match_info->regex->jit_status; g_assert_not_reached (); }
View file
_service:tar_scm:glib-2.78.3.tar.xz/glib/tests/regex.c -> _service:tar_scm:glib-2.78.6.tar.xz/glib/tests/regex.c
Changed
@@ -1885,16 +1885,6 @@ g_match_info_free (match); g_regex_unref (regex); - regex = g_regex_new ("(?<!dogs?|cats?) x", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error); - g_assert (regex == NULL); - g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND); - g_clear_error (&error); - - regex = g_regex_new ("(?<=ab(c|de)) foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error); - g_assert (regex == NULL); - g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND); - g_clear_error (&error); - regex = g_regex_new ("(?<=abc|abde)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error); g_assert (regex); g_assert_no_error (error); @@ -2517,6 +2507,28 @@ g_regex_unref (regex); } +static void +test_compiled_regex_after_jit_failure (void) +{ + GRegex *regex = NULL; + char stringLARGE_TEST_STRING_LEN; + + g_test_summary ("Test that failed OPTIMIZE regex doesn't cause issues on subsequent matches"); + g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2824"); + + regex = g_regex_new ("^(?: \t\n|^:cntrl:)*$", G_REGEX_OPTIMIZE, 0, NULL); + + /* Generate large enough string to cause JIT failure on this regex. */ + memset (string, '*', LARGE_TEST_STRING_LEN); + stringLARGE_TEST_STRING_LEN - 1 = '\0'; + + g_assert_true (g_regex_match (regex, string, 0, NULL)); + /* Second assert here is the key - does the first JIT overflow mess up our state? */ + g_assert_true (g_regex_match (regex, string, 0, NULL)); + + g_regex_unref (regex); +} + int main (int argc, char *argv) { @@ -2537,6 +2549,7 @@ g_test_add_func ("/regex/compile-errors", test_compile_errors); g_test_add_func ("/regex/jit-unsupported-matching", test_jit_unsupported_matching_options); g_test_add_func ("/regex/unmatched-named-subpattern", test_unmatched_named_subpattern); + g_test_add_func ("/regex/compiled-regex-after-jit-failure", test_compiled_regex_after_jit_failure); /* TEST_NEW(pattern, compile_opts, match_opts) */ TEST_NEW("A-Z+", G_REGEX_CASELESS | G_REGEX_EXTENDED | G_REGEX_OPTIMIZE, G_REGEX_MATCH_NOTBOL | G_REGEX_MATCH_PARTIAL);
View file
_service:tar_scm:glib-2.78.3.tar.xz/gobject/gobject_gdb.py -> _service:tar_scm:glib-2.78.6.tar.xz/gobject/gobject_gdb.py
Changed
@@ -148,11 +148,16 @@ id = long(id) if id == 0: return None - val = read_global_var("g_signal_nodes") - max_s = read_global_var("g_n_signal_nodes") - max_s = long(max_s) - if id < max_s: - return valid"name".string() + + try: + val = read_global_var("g_signal_nodes") + max_s = read_global_var("g_n_signal_nodes") + max_s = long(max_s) + if id < max_s: + return valid"name".string() + except gdb.error: + return None + return None
View file
_service:tar_scm:glib-2.78.3.tar.xz/meson.build -> _service:tar_scm:glib-2.78.6.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('glib', 'c', - version : '2.78.3', + version : '2.78.6', # NOTE: See the policy in docs/meson-version.md before changing the Meson dependency meson_version : '>= 0.60.0', default_options :
View file
_service:tar_scm:glib-2.78.3.tar.xz/po/en_GB.po -> _service:tar_scm:glib-2.78.6.tar.xz/po/en_GB.po
Changed
@@ -5,21 +5,22 @@ # Philip Withnall <philip@tecnocode.co.uk>, 2010. # Zander Brown <zbrown@gnome.org>, 2019-2021. # Bruce Cowan <bruce@bcowan.me.uk>, 2009-2023. +# Andi Chandler <andi@gowling.com>, 2024. # msgid "" msgstr "" "Project-Id-Version: glib\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/glib/issues\n" -"POT-Creation-Date: 2023-08-31 11:01+0000\n" -"PO-Revision-Date: 2023-09-06 12:31+0100\n" -"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n" +"POT-Creation-Date: 2024-01-22 10:44+0000\n" +"PO-Revision-Date: 2024-02-26 13:31+0000\n" +"Last-Translator: Andi Chandler <andi@gowling.com>\n" "Language-Team: English - United Kingdom <en@li.org>\n" "Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.1\n" +"X-Generator: Poedit 3.4.2\n" "X-Project-Style: gnome\n" "X-DL-Team: en_GB\n" "X-DL-Module: glib\n" @@ -45,23 +46,23 @@ msgid "Failed to find default application for URI Scheme ‘%s’" msgstr "Failed to find default application for URI Scheme ‘%s’" -#: gio/gapplication.c:502 -msgid "GApplication options" -msgstr "GApplication options" +#: gio/gapplication.c:506 +msgid "GApplication Options:" +msgstr "GApplication Options:" -#: gio/gapplication.c:502 +#: gio/gapplication.c:506 msgid "Show GApplication options" msgstr "Show GApplication options" -#: gio/gapplication.c:547 +#: gio/gapplication.c:551 msgid "Enter GApplication service mode (use from D-Bus service files)" msgstr "Enter GApplication service mode (use from D-Bus service files)" -#: gio/gapplication.c:559 +#: gio/gapplication.c:563 msgid "Override the application’s ID" msgstr "Override the application’s ID" -#: gio/gapplication.c:571 +#: gio/gapplication.c:575 msgid "Replace the running instance" msgstr "Replace the running instance" @@ -278,8 +279,8 @@ "\n" #: gio/gbufferedinputstream.c:422 gio/gbufferedinputstream.c:500 -#: gio/ginputstream.c:181 gio/ginputstream.c:381 gio/ginputstream.c:650 -#: gio/ginputstream.c:1052 gio/goutputstream.c:225 gio/goutputstream.c:1051 +#: gio/ginputstream.c:181 gio/ginputstream.c:381 gio/ginputstream.c:651 +#: gio/ginputstream.c:1056 gio/goutputstream.c:225 gio/goutputstream.c:1052 #: gio/gpollableinputstream.c:221 gio/gpollableoutputstream.c:293 #, c-format msgid "Too large count value passed to %s" @@ -294,8 +295,8 @@ msgid "Cannot truncate GBufferedInputStream" msgstr "Cannot truncate GBufferedInputStream" -#: gio/gbufferedinputstream.c:985 gio/ginputstream.c:1241 gio/giostream.c:302 -#: gio/goutputstream.c:2200 +#: gio/gbufferedinputstream.c:985 gio/ginputstream.c:1246 gio/giostream.c:302 +#: gio/goutputstream.c:2208 msgid "Stream is already closed" msgstr "Stream is already closed" @@ -322,28 +323,28 @@ msgstr "Not enough space in destination" #: gio/gcharsetconverter.c:344 gio/gdatainputstream.c:850 -#: gio/gdatainputstream.c:1268 glib/gconvert.c:451 glib/gconvert.c:883 +#: gio/gdatainputstream.c:1268 glib/gconvert.c:450 glib/gconvert.c:882 #: glib/giochannel.c:1576 glib/giochannel.c:1618 glib/giochannel.c:2478 -#: glib/gutf8.c:892 glib/gutf8.c:1346 +#: glib/gutf8.c:958 glib/gutf8.c:1412 msgid "Invalid byte sequence in conversion input" msgstr "Invalid byte sequence in conversion input" -#: gio/gcharsetconverter.c:349 glib/gconvert.c:459 glib/gconvert.c:797 +#: gio/gcharsetconverter.c:349 glib/gconvert.c:458 glib/gconvert.c:796 #: glib/giochannel.c:1583 glib/giochannel.c:2493 #, c-format msgid "Error during conversion: %s" msgstr "Error during conversion: %s" -#: gio/gcharsetconverter.c:447 gio/gsocket.c:1151 +#: gio/gcharsetconverter.c:447 gio/gsocket.c:1164 msgid "Cancellable initialization not supported" msgstr "Cancellable initialisation not supported" -#: gio/gcharsetconverter.c:458 glib/gconvert.c:324 glib/giochannel.c:1404 +#: gio/gcharsetconverter.c:458 glib/gconvert.c:323 glib/giochannel.c:1404 #, c-format msgid "Conversion from character set “%s” to “%s” is not supported" msgstr "Conversion from character set “%s” to “%s” is not supported" -#: gio/gcharsetconverter.c:462 glib/gconvert.c:328 +#: gio/gcharsetconverter.c:462 glib/gconvert.c:327 #, c-format msgid "Could not open converter from “%s” to “%s”" msgstr "Could not open converter from “%s” to “%s”" @@ -594,13 +595,13 @@ msgid "Error creating directory “%s”: %s" msgstr "Error creating directory “%s”: %s" -#: gio/gdbusauthmechanismsha1.c:368 gio/gfile.c:1095 gio/gfile.c:1333 -#: gio/gfile.c:1471 gio/gfile.c:1709 gio/gfile.c:1764 gio/gfile.c:1822 -#: gio/gfile.c:1906 gio/gfile.c:1963 gio/gfile.c:2027 gio/gfile.c:2082 -#: gio/gfile.c:3797 gio/gfile.c:3937 gio/gfile.c:4349 gio/gfile.c:4819 -#: gio/gfile.c:5230 gio/gfile.c:5315 gio/gfile.c:5405 gio/gfile.c:5502 -#: gio/gfile.c:5589 gio/gfile.c:5690 gio/gfile.c:8819 gio/gfile.c:8909 -#: gio/gfile.c:8993 gio/win32/gwinhttpfile.c:453 +#: gio/gdbusauthmechanismsha1.c:368 gio/gfile.c:1102 gio/gfile.c:1340 +#: gio/gfile.c:1478 gio/gfile.c:1716 gio/gfile.c:1771 gio/gfile.c:1829 +#: gio/gfile.c:1913 gio/gfile.c:1970 gio/gfile.c:2034 gio/gfile.c:2089 +#: gio/gfile.c:3949 gio/gfile.c:4088 gio/gfile.c:4500 gio/gfile.c:4970 +#: gio/gfile.c:5382 gio/gfile.c:5467 gio/gfile.c:5557 gio/gfile.c:5654 +#: gio/gfile.c:5741 gio/gfile.c:5842 gio/gfile.c:8996 gio/gfile.c:9086 +#: gio/gfile.c:9170 gio/win32/gwinhttpfile.c:453 msgid "Operation not supported" msgstr "Operation not supported" @@ -765,24 +766,20 @@ msgstr "type is INVALID" #: gio/gdbusmessage.c:1324 -#| msgid "METHOD_CALL message: PATH or MEMBER header field is missing" msgid "METHOD_CALL message: PATH or MEMBER header field is missing or invalid" msgstr "METHOD_CALL message: PATH or MEMBER header field is missing or invalid" #: gio/gdbusmessage.c:1340 -#| msgid "METHOD_RETURN message: REPLY_SERIAL header field is missing" msgid "METHOD_RETURN message: REPLY_SERIAL header field is missing or invalid" msgstr "METHOD_RETURN message: REPLY_SERIAL header field is missing or invalid" #: gio/gdbusmessage.c:1360 -#| msgid "ERROR message: REPLY_SERIAL or ERROR_NAME header field is missing" msgid "" "ERROR message: REPLY_SERIAL or ERROR_NAME header field is missing or invalid" msgstr "" "ERROR message: REPLY_SERIAL or ERROR_NAME header field is missing or invalid" #: gio/gdbusmessage.c:1384 -#| msgid "SIGNAL message: PATH, INTERFACE or MEMBER header field is missing" msgid "" "SIGNAL message: PATH, INTERFACE or MEMBER header field is missing or invalid" msgstr "" @@ -1416,78 +1413,83 @@ #. * trying to find the enclosing (user visible) #. * mount of a file, but none exists. #. -#: gio/gfile.c:1594 +#: gio/gfile.c:1601 msgid "Containing mount does not exist" msgstr "Containing mount does not exist" -#: gio/gfile.c:2641 gio/glocalfile.c:2515 +#: gio/gfile.c:2648 gio/glocalfile.c:2518 msgid "Can’t copy over directory" msgstr "Can’t copy over directory" -#: gio/gfile.c:2701 +#: gio/gfile.c:2708 msgid "Can’t copy directory over directory" msgstr "Can’t copy directory over directory" -#: gio/gfile.c:2709 +#: gio/gfile.c:2716 msgid "Target file exists" msgstr "Target file exists" -#: gio/gfile.c:2728 +#: gio/gfile.c:2735 msgid "Can’t recursively copy directory" msgstr "Can’t recursively copy directory" -#: gio/gfile.c:3029 -msgid "Splice not supported" -msgstr "Splice not supported" +#: gio/gfile.c:3044 gio/gfile.c:3092 +#, c-format +msgid "Copy file range not supported" +msgstr "Copy file range not supported" -#: gio/gfile.c:3033 +#: gio/gfile.c:3050 gio/gfile.c:3161
View file
_service:tar_scm:glib-2.78.3.tar.xz/po/ka.po -> _service:tar_scm:glib-2.78.6.tar.xz/po/ka.po
Changed
@@ -6,9 +6,9 @@ msgid "" msgstr "" "Project-Id-Version: glib\n" -"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/glib/issues\n" -"POT-Creation-Date: 2023-10-07 15:03+0000\n" -"PO-Revision-Date: 2023-10-20 07:49+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/glib/issues/new\n" +"POT-Creation-Date: 2024-03-19 07:49+0000\n" +"PO-Revision-Date: 2024-03-25 05:52+0100\n" "Last-Translator: Ekaterine Papava <papava.e@gtu.ge>\n" "Language-Team: Georgian <(nothing)>\n" "Language: ka\n" @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.4\n" +"X-Generator: Poedit 3.3.2\n" #: gio/gappinfo.c:339 msgid "Setting default applications not supported yet" @@ -610,8 +610,8 @@ #: gio/gfile.c:1913 gio/gfile.c:1970 gio/gfile.c:2034 gio/gfile.c:2089 #: gio/gfile.c:3949 gio/gfile.c:4088 gio/gfile.c:4500 gio/gfile.c:4970 #: gio/gfile.c:5382 gio/gfile.c:5467 gio/gfile.c:5557 gio/gfile.c:5654 -#: gio/gfile.c:5741 gio/gfile.c:5842 gio/gfile.c:9000 gio/gfile.c:9090 -#: gio/gfile.c:9174 gio/win32/gwinhttpfile.c:453 +#: gio/gfile.c:5741 gio/gfile.c:5842 gio/gfile.c:8996 gio/gfile.c:9086 +#: gio/gfile.c:9170 gio/win32/gwinhttpfile.c:453 msgid "Operation not supported" msgstr "ოპერაცია მხარდაუჭერელია" @@ -1478,15 +1478,15 @@ #: gio/gfile.c:3321 msgid "Copy (reflink/clone) between mounts is not supported" -msgstr "" +msgstr "მიმაგრების წერტილებს შორის კოპირება (reflink/clone) მხარდაჭერილი არაა" #: gio/gfile.c:3325 msgid "Copy (reflink/clone) is not supported or invalid" -msgstr "" +msgstr "კოპირება (reflink/clone) მხარდაუჭერელი ან არასწორია" #: gio/gfile.c:3330 msgid "Copy (reflink/clone) is not supported or didn’t work" -msgstr "" +msgstr "კოპირება (reflink/clone) მხარდაუჭერელია ან არ იმუშავა" #: gio/gfile.c:3395 msgid "Can’t copy special file" @@ -1496,7 +1496,7 @@ msgid "Invalid symlink value given" msgstr "სიმბმბულის მითითებული მნიშვნელობა არასწორია" -#: gio/gfile.c:4324 glib/gfileutils.c:2392 +#: gio/gfile.c:4324 glib/gfileutils.c:2424 msgid "Symbolic links not supported" msgstr "სიმბოლური ბმების გამოყენება არაა რეალიზებული" @@ -1509,16 +1509,16 @@ msgid "File names cannot contain “%c”" msgstr "ფაილის სახელი არ შეიძლება, \"%c\"-ს შეიცავდეს" -#: gio/gfile.c:7155 gio/gfile.c:7281 +#: gio/gfile.c:7151 gio/gfile.c:7277 #, c-format msgid "Failed to create a temporary directory for template “%s”: %s" msgstr "შაბლონისთვის \"%s\" დროებითი საქაღალდის შექმნის შეცდომა: %s" -#: gio/gfile.c:7599 gio/gvolume.c:366 +#: gio/gfile.c:7595 gio/gvolume.c:366 msgid "volume doesn’t implement mount" msgstr "ტომს მიმაგრების მხარდაჭერა არ გააჩნია" -#: gio/gfile.c:7713 gio/gfile.c:7790 +#: gio/gfile.c:7709 gio/gfile.c:7786 msgid "No application is registered as handling this file" msgstr "ამ ფაილის გასახსნელი პროგრამა დარეგისტრირებული არაა" @@ -1793,6 +1793,9 @@ "locations instead of local files: for example, you can use something\n" "like smb://server/resource/file.txt as location." msgstr "" +"gio cat ჩვეულებრივი cat ბრძანებასავით მუშაობს, მაგრამ\n" +"ლოკალური ფაილების მაგიერ GIO მდებარეობებს იყენებს: მაგალითად,\n" +"შეგიძლიათ, მდებარეობად smb://server/resource/file.txt გამოიყენოთ." #: gio/gio-tool-cat.c:164 gio/gio-tool-info.c:413 gio/gio-tool-mkdir.c:78 #: gio/gio-tool-monitor.c:231 gio/gio-tool-mount.c:1287 gio/gio-tool-open.c:98 @@ -1845,7 +1848,7 @@ #: gio/gio-tool-copy.c:107 msgid "Copy one or more files from SOURCE to DESTINATION." -msgstr "" +msgstr "ერთი ან მეტი ფაილის კოპირება მითითებული წყაროდან მითითებულ სამიზნეში." #: gio/gio-tool-copy.c:109 msgid "" @@ -1853,6 +1856,9 @@ "locations instead of local files: for example, you can use something\n" "like smb://server/resource/file.txt as location." msgstr "" +"gio copy ჩვეულებრივი cp ბრძანების მსგავსია, მაგრამ ლოკალური ფაილების\n" +"მაგიერ GIO-ის მდებარეობებს იყენებს: მაგალითად, შეგიძლიათ გამოიყენოთ\n" +"smb://server/resource/file.txt." #: gio/gio-tool-copy.c:151 #, c-format @@ -1953,6 +1959,12 @@ "be specified with their GIO name, e.g. standard::icon, or just by\n" "namespace, e.g. unix, or by “*”, which matches all attributes" msgstr "" +"gio info ჩვეულებრივი ls ბრძანების მსგავსია, მაგრამ ლოკალური ფაილების მაგიერ\n" +"GIO მდებარეობებს იყენებს. მაგალითად, მდებარეობად შეგიძლიათ გამოიყენოთ\n" +"smb://server/resource/file.txt. ფაილის ატრიბუტები მათი GIO სახელებთან ერთად " +"შეგიძლიათ, გამოიყენოთ\n" +"მაგ: standard::icon ან, უბრალოდ, სახელების სივრცით. მაგ: unix ან \"*\", " +"რომელიც ყველა ატრიბუტს ნიშნავს" #. Translators: commandline placeholder #: gio/gio-tool-launch.c:56 @@ -1964,6 +1976,8 @@ "Launch an application from a desktop file, passing optional filename " "arguments to it." msgstr "" +"აპლიკაციის გაშვება სამუშაო მაგიდის ფაილიდან, არასავალდებულო ფაილის სახელის " +"გადაცემით." #: gio/gio-tool-launch.c:79 msgid "No desktop file given" @@ -1981,7 +1995,7 @@ #: gio/gio-tool-launch.c:109 #, c-format msgid "Unable to load application information for ‘%s‘" -msgstr "" +msgstr "ვერ ჩავტვირთე აპლიკაციის ინფორმაცია '%s'-სთვის" #: gio/gio-tool-launch.c:121 #, c-format @@ -2015,6 +2029,10 @@ "like smb://server/resource/file.txt as location. File attributes can\n" "be specified with their GIO name, e.g. standard::icon" msgstr "" +"gio list ჩვეულებრივი ls ბრძანების მსგავსია, მაგრამ ლოკალური ფაილების\n" +"ნაცვლად GIO მდებარეობებს იყენებს. შეგიძლიათ გამოიყენოთ, მაგ:\n" +"smb://server/resource/file.txt. ფაილის ატრიბუტები მათი GIO სახელით\n" +"შეგიძლიათ, მიუთითოთ. მაგ: standard::icon" #. Translators: commandline placeholder #: gio/gio-tool-mime.c:73 @@ -2035,10 +2053,14 @@ "for the mimetype. If a handler is given, it is set as the default\n" "handler for the mimetype." msgstr "" +"თუ დამმუშავებელი მითითებული არაა, ნაჩვენები იქნება რეგისტრირებული და " +"რეკომენდებული აპლიკაციების\n" +"სია ამ mime ტიპისთვის. თუ დამმუშავებელი მითითებულია, ის ამ mime ტიპისთვის\n" +"ნაგულისხმევ დამმუშავებლად იქნება დაყენებული." #: gio/gio-tool-mime.c:102 msgid "Must specify a single mimetype, and maybe a handler" -msgstr "" +msgstr "უნდა მიუთითოთ ერთი MIME ტიპი ან, შეიძლება, დამმუშავებელი" #: gio/gio-tool-mime.c:118 #, c-format @@ -2075,6 +2097,7 @@ #, c-format msgid "Failed to set “%s” as the default handler for “%s”: %s\n" msgstr "" +"შეცდომა \"%s\"-ის ნაგულიხმევ დამმუშავებლად დაყენებისას \"%s\"-სთვის: %s\n" #: gio/gio-tool-mkdir.c:33 msgid "Create parent directories" @@ -2090,26 +2113,31 @@ "locations instead of local files: for example, you can use something\n" "like smb://server/resource/mydir as location." msgstr "" +"gio mkidr ჩვეულებრივი mkdir ბრძანების მსგავსია, მაგრამ ლოკალური\n" +"ფაილები მაგიერ GIO მდებარეობებს იყენებს. მაგ; შეგიძლიათ გამოიყენოთ\n" +"smb://server/resource/mydir." #: gio/gio-tool-monitor.c:39 msgid "Monitor a directory (default: depends on type)" -msgstr "" +msgstr "საქაღალდის მონიტორინგი (ნაგულისხმევი: დამოკიდებულია ტიპზე)" #: gio/gio-tool-monitor.c:41 msgid "Monitor a file (default: depends on type)" -msgstr "" +msgstr "ფაილის მონიტორინგი (ნაგულისხმევი: დამოკიდებულია ტიპზე)" #: gio/gio-tool-monitor.c:43 msgid "Monitor a file directly (notices changes made via hardlinks)" -msgstr "" +msgstr "ფაილის პირდაპირი თვალთვალი (ამჩნევს მყარი ბმულების ცვლილებებს)" #: gio/gio-tool-monitor.c:45
View file
_service:tar_scm:glib-2.78.3.tar.xz/po/pt_BR.po -> _service:tar_scm:glib-2.78.6.tar.xz/po/pt_BR.po
Changed
@@ -23,16 +23,16 @@ msgstr "" "Project-Id-Version: glib\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/glib/issues\n" -"POT-Creation-Date: 2023-08-31 11:01+0000\n" -"PO-Revision-Date: 2023-09-17 22:27-0300\n" -"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" +"POT-Creation-Date: 2023-10-07 15:03+0000\n" +"PO-Revision-Date: 2024-03-08 08:52-0300\n" +"Last-Translator: Leônidas Araújo <leorusvellt@hotmail.com>\n" "Language-Team: Brazilian Portuguese <https://br.gnome.org/traducao>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"X-Generator: Gtranslator 45.alpha0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.3.1\n" "X-Project-Style: gnome\n" "X-DL-Team: pt_BR\n" "X-DL-Module: glib\n" @@ -60,25 +60,25 @@ msgid "Failed to find default application for URI Scheme ‘%s’" msgstr "Falha ao encontrar o aplicativo padrão para o Esquema de URI “%s”" -#: gio/gapplication.c:502 -msgid "GApplication options" -msgstr "Opções do GApplication" +#: gio/gapplication.c:506 +msgid "GApplication Options:" +msgstr "Opções do GApplication:" -#: gio/gapplication.c:502 +#: gio/gapplication.c:506 msgid "Show GApplication options" msgstr "Mostra as opções do GApplication" -#: gio/gapplication.c:547 +#: gio/gapplication.c:551 msgid "Enter GApplication service mode (use from D-Bus service files)" msgstr "" "Digite o modo de serviço do GApplication (usar dos arquivos de serviços do D-" "Bus)" -#: gio/gapplication.c:559 +#: gio/gapplication.c:563 msgid "Override the application’s ID" msgstr "Substitui ID do aplicativo" -#: gio/gapplication.c:571 +#: gio/gapplication.c:575 msgid "Replace the running instance" msgstr "Substitui a instância em execução" @@ -300,8 +300,8 @@ "\n" #: gio/gbufferedinputstream.c:422 gio/gbufferedinputstream.c:500 -#: gio/ginputstream.c:181 gio/ginputstream.c:381 gio/ginputstream.c:650 -#: gio/ginputstream.c:1052 gio/goutputstream.c:225 gio/goutputstream.c:1051 +#: gio/ginputstream.c:181 gio/ginputstream.c:381 gio/ginputstream.c:651 +#: gio/ginputstream.c:1056 gio/goutputstream.c:225 gio/goutputstream.c:1052 #: gio/gpollableinputstream.c:221 gio/gpollableoutputstream.c:293 #, c-format msgid "Too large count value passed to %s" @@ -316,8 +316,8 @@ msgid "Cannot truncate GBufferedInputStream" msgstr "Não é possível truncar GBufferedInputStream" -#: gio/gbufferedinputstream.c:985 gio/ginputstream.c:1241 gio/giostream.c:302 -#: gio/goutputstream.c:2200 +#: gio/gbufferedinputstream.c:985 gio/ginputstream.c:1246 gio/giostream.c:302 +#: gio/goutputstream.c:2208 msgid "Stream is already closed" msgstr "O fluxo já está fechado" @@ -344,28 +344,28 @@ msgstr "Espaço insuficiente no destino" #: gio/gcharsetconverter.c:344 gio/gdatainputstream.c:850 -#: gio/gdatainputstream.c:1268 glib/gconvert.c:451 glib/gconvert.c:883 +#: gio/gdatainputstream.c:1268 glib/gconvert.c:450 glib/gconvert.c:882 #: glib/giochannel.c:1576 glib/giochannel.c:1618 glib/giochannel.c:2478 -#: glib/gutf8.c:892 glib/gutf8.c:1346 +#: glib/gutf8.c:958 glib/gutf8.c:1412 msgid "Invalid byte sequence in conversion input" msgstr "Sequência de bytes inválida na entrada de conversão" -#: gio/gcharsetconverter.c:349 glib/gconvert.c:459 glib/gconvert.c:797 +#: gio/gcharsetconverter.c:349 glib/gconvert.c:458 glib/gconvert.c:796 #: glib/giochannel.c:1583 glib/giochannel.c:2493 #, c-format msgid "Error during conversion: %s" msgstr "Erro durante a conversão: %s" -#: gio/gcharsetconverter.c:447 gio/gsocket.c:1151 +#: gio/gcharsetconverter.c:447 gio/gsocket.c:1164 msgid "Cancellable initialization not supported" msgstr "Sem suporte a inicialização cancelável" -#: gio/gcharsetconverter.c:458 glib/gconvert.c:324 glib/giochannel.c:1404 +#: gio/gcharsetconverter.c:458 glib/gconvert.c:323 glib/giochannel.c:1404 #, c-format msgid "Conversion from character set “%s” to “%s” is not supported" msgstr "Não há suporte à conversão do conjunto de caracteres “%s” para “%s”" -#: gio/gcharsetconverter.c:462 glib/gconvert.c:328 +#: gio/gcharsetconverter.c:462 glib/gconvert.c:327 #, c-format msgid "Could not open converter from “%s” to “%s”" msgstr "Não foi possível abrir conversor de “%s” para “%s”" @@ -631,13 +631,13 @@ msgid "Error creating directory “%s”: %s" msgstr "Erro ao criar o diretório “%s”: %s" -#: gio/gdbusauthmechanismsha1.c:368 gio/gfile.c:1095 gio/gfile.c:1333 -#: gio/gfile.c:1471 gio/gfile.c:1709 gio/gfile.c:1764 gio/gfile.c:1822 -#: gio/gfile.c:1906 gio/gfile.c:1963 gio/gfile.c:2027 gio/gfile.c:2082 -#: gio/gfile.c:3797 gio/gfile.c:3937 gio/gfile.c:4349 gio/gfile.c:4819 -#: gio/gfile.c:5230 gio/gfile.c:5315 gio/gfile.c:5405 gio/gfile.c:5502 -#: gio/gfile.c:5589 gio/gfile.c:5690 gio/gfile.c:8819 gio/gfile.c:8909 -#: gio/gfile.c:8993 gio/win32/gwinhttpfile.c:453 +#: gio/gdbusauthmechanismsha1.c:368 gio/gfile.c:1102 gio/gfile.c:1340 +#: gio/gfile.c:1478 gio/gfile.c:1716 gio/gfile.c:1771 gio/gfile.c:1829 +#: gio/gfile.c:1913 gio/gfile.c:1970 gio/gfile.c:2034 gio/gfile.c:2089 +#: gio/gfile.c:3949 gio/gfile.c:4088 gio/gfile.c:4500 gio/gfile.c:4970 +#: gio/gfile.c:5382 gio/gfile.c:5467 gio/gfile.c:5557 gio/gfile.c:5654 +#: gio/gfile.c:5741 gio/gfile.c:5842 gio/gfile.c:9000 gio/gfile.c:9090 +#: gio/gfile.c:9174 gio/win32/gwinhttpfile.c:453 msgid "Operation not supported" msgstr "Operação sem suporte" @@ -1486,78 +1486,83 @@ #. * trying to find the enclosing (user visible) #. * mount of a file, but none exists. #. -#: gio/gfile.c:1594 +#: gio/gfile.c:1601 msgid "Containing mount does not exist" msgstr "Ponto de montagem contido não existe" -#: gio/gfile.c:2641 gio/glocalfile.c:2515 +#: gio/gfile.c:2648 gio/glocalfile.c:2518 msgid "Can’t copy over directory" msgstr "Não é possível copiar sobre diretório" -#: gio/gfile.c:2701 +#: gio/gfile.c:2708 msgid "Can’t copy directory over directory" msgstr "Não é possível copiar diretório sobre diretório" -#: gio/gfile.c:2709 +#: gio/gfile.c:2716 msgid "Target file exists" msgstr "Arquivo alvo existe" -#: gio/gfile.c:2728 +#: gio/gfile.c:2735 msgid "Can’t recursively copy directory" msgstr "Não é possível copiar o diretório recursivamente" -#: gio/gfile.c:3029 -msgid "Splice not supported" -msgstr "Não há suporte a união de arquivos" +#: gio/gfile.c:3044 gio/gfile.c:3092 +#, c-format +msgid "Copy file range not supported" +msgstr "Intervalo de cópia de arquivo não suportado" -#: gio/gfile.c:3033 +#: gio/gfile.c:3050 gio/gfile.c:3161 #, c-format msgid "Error splicing file: %s" msgstr "Erro ao unir o arquivo: %s" -#: gio/gfile.c:3195 +#: gio/gfile.c:3157 +msgid "Splice not supported" +msgstr "Não há suporte a união de arquivos" + +#: gio/gfile.c:3321 msgid "Copy (reflink/clone) between mounts is not supported" msgstr "Não há suporte a copiar (reflink/clone) entre montagens" -#: gio/gfile.c:3199 +#: gio/gfile.c:3325 msgid "Copy (reflink/clone) is not supported or invalid" msgstr "Não há suporte a copiar (reflink/clone) ou é inválido" -#: gio/gfile.c:3204 +#: gio/gfile.c:3330 msgid "Copy (reflink/clone) is not supported or didn’t work" msgstr "Não há suporte a copiar (reflink/clone) ou não funcionou" -#: gio/gfile.c:3269 +#: gio/gfile.c:3395 msgid "Can’t copy special file" msgstr "Não é possível copiar o arquivo especial"
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2