9049 Commits

Author SHA1 Message Date
Julian Sparber
91a1ff3b5c gdbus-tool call: Allow handles inside nested containers
This recursively walks the entire input of `gdbus call` to find file
descriptor handles allowing to nest handles inside container types.

Closes: https://gitlab.gnome.org/GNOME/glib/-/issues/3624
2025-04-07 15:12:07 +02:00
Philip Withnall
1bf83890a0 Merge branch '1250-socket-listener-leak' into 'main'
gsocketlistener: Fix IPv4 listen() error handling

Closes #1250

See merge request GNOME/glib!643
2025-04-03 15:15:59 +00:00
Philip Withnall
f31c072005 Merge branch 'pgriffis/gresolver-onlyloopback' into 'main'
threadedresolver: Return valid addresses when only having loopback interfaces

Closes #3641

See merge request GNOME/glib!4566
2025-04-03 15:09:58 +00:00
Philip Withnall
56515e93a7 Merge branch '3527-Wshorten-64-to-32' into 'main'
Fix various -Wshorten-64-to-32 warnings

See merge request GNOME/glib!4387
2025-04-03 15:07:09 +00:00
Philip Withnall
29e27d8dcd Merge branch 'cancellable-connection-fixes' into 'main'
cancellable: Fix connect and disconnect references handling

Closes #3642 and #3643

See merge request GNOME/glib!4573
2025-04-03 13:55:49 +00:00
Marco Trevisan (Treviño)
a2f98c86ff gio/cancellable: Never call toggle notify callback in locked state
We had code to avoid that we could call a toggle "up" notification
callback in locked state, but this was not covering the case in which
the cancellable second to last reference was removed in its cancellation
callback.

In fact, in such case we end up going from 2 -> 1 references during the
signal callback call and this leads to calling the toggle notify
callback in locked state.

To prevent this, add an even further reference before calling the
callback (in locked state, but there's no risk that a toggle-up
notification happens now), and drop it once unlocked again.
2025-04-03 15:22:16 +02:00
Marco Trevisan (Treviño)
ec2fee555f gio/cancellable: Do not call data destroy function while locked
If when calling g_cancellable_connect() the cancellable was already
cancelled we could have ended up in calling the data cleanup
function while the cancellable lock was held.

This is likely not an issue, but it's still better not to do it,
so protect the code against it
2025-04-03 15:22:16 +02:00
Marco Trevisan (Treviño)
c6ace7aaf7 gio/cancellable: Fix comments for g_cancellable_connect()
We had wrong comments, in particular:

  @callback is called exactly once each time @cancellable is cancelled,
  either directly at the time of the connect if @cancellable is already
  cancelled, or when @cancellable is cancelled in some thread.
  In case the cancellable is reset via [method@Gio.Cancellable.reset]
  then the callback can be called again if the @cancellable is cancelled

This is not true if `@cancellable` is already cancelled because then the
callback will be thrown away, and will not be called for subsequent
cancellations.

  Since GLib 2.40, the lock protecting @cancellable is not held when
  @callback is invoked.  This lifts a restriction in place for
  earlier GLib versions which now makes it easier to write cleanup
  code that unconditionally invokes e.g. g_cancellable_cancel().

As per commit 3a07b2abd4006 this section needs some amending since
it's not true anymore, as the GCancellable's mutex is held when `@callback` is
invoked. However this happens in a way that it's still safe to call most
of the GCancellable API.

Closes: #3642
2025-04-03 15:22:16 +02:00
Philip Withnall
7ea714e658 Merge branch 'wip/3v1n0/sanitizer-memory-fixes' into 'main'
Memory sanitizer fixes

See merge request GNOME/glib!4484
2025-04-03 13:04:05 +00:00
Marco Trevisan (Treviño)
49680afd5c gio/cancellable: Always add reference while emitting cancelled signal
When a non-cancelled cancellable ::cancelled signal callback is called
the cancellable has enough references so that it can be unreferenced on
the callback itself. However this doesn't happen if the cancellable has
been already cancelled at the moment we connect to it.

To prevent this, add a temporary reference before calling the signal
callback.

Note that we do this also if the callback has not been already cancelled
to prevent that we may end up calling a toggle-notify callback while we
are locked.

Add tests

Closes: #3643
2025-04-03 14:48:57 +02:00
Marco Trevisan (Treviño)
7432441581 test/cancellable: Check that a cancellable can be unreffed on callback
This works when the cancellable has not been cancelled yet.
2025-04-03 14:48:56 +02:00
Marco Trevisan (Treviño)
ea52feb658 gio/tests/gdbus-export: Ensure we call all the callbacks on return
Ensure we don't do an user-after-free access, as reported by ASAN:

  ==3704==ERROR: AddressSanitizer: stack-use-after-return on address
   0x70a58f8631c0 at pc 0x000000405144 bp 0x7fffff62c7a0 sp 0x7fffff62c798
   READ of size 4 at 0x70a58f8631c0 thread T0
    #0 0x405143 in on_object_unregistered ../../GNOME/glib/gio/tests/gdbus-export.c:597
    #1 0x70a592e858d8 in call_destroy_notify_data_in_idle ../../GNOME/glib/gio/gdbusconnection.c:244
    #2 0x70a5940016a4 in g_idle_dispatch ../../GNOME/glib/glib/gmain.c:6221
    #3 0x70a59401095b in g_main_dispatch ../../GNOME/glib/glib/gmain.c:3348
    #4 0x70a59401095b in g_main_context_dispatch_unlocked ../../GNOME/glib/glib/gmain.c:4197
    #5 0x70a59401ba17 in g_main_context_iterate_unlocked ../../GNOME/glib/glib/gmain.c:4262
    #6 0x70a59401cc73 in g_main_context_iteration ../../GNOME/glib/glib/gmain.c:4327
    #7 0x405658 in test_threaded_unregistration_iteration ../../GNOME/glib/gio/tests/gdbus-export.c:1878
    #8 0x405658 in test_threaded_unregistration ../../GNOME/glib/gio/tests/gdbus-export.c:1952
    #9 0x70a5940dfb04 in test_case_run ../../GNOME/glib/glib/gtestutils.c:2988
    #10 0x70a5940dfb04 in g_test_run_suite_internal ../../GNOME/glib/glib/gtestutils.c:3090
    #11 0x70a5940df893 in g_test_run_suite_internal ../../GNOME/glib/glib/gtestutils.c:3109
    #12 0x70a5940df893 in g_test_run_suite_internal ../../GNOME/glib/glib/gtestutils.c:3109
    #13 0x70a5940e0bc9 in g_test_run_suite ../../GNOME/glib/glib/gtestutils.c:3189
    #14 0x70a5940e0d1f in g_test_run ../../GNOME/glib/glib/gtestutils.c:2275
    #15 0x40eb72 in session_bus_run ../../GNOME/glib/gio/tests/gdbus-sessionbus.c:69
    #16 0x403a2c in main ../../GNOME/glib/gio/tests/gdbus-export.c:1990
    #17 0x70a591d9f149 in __libc_start_call_main (/lib64/libc.so.6+0x28149) (BuildId: 0d710e9d9dc10c500b8119c85da75004183618e2)
    #18 0x70a591d9f20a in __libc_start_main_impl (/lib64/libc.so.6+0x2820a) (BuildId: 0d710e9d9dc10c500b8119c85da75004183618e2)
    #19 0x403b44 in _start (/tmp/_build/gio/tests/gdbus-export+0x403b44) (BuildId: f6312e919c3d94e4c49270b0dfc5c870e1ba550b)

Address 0x70a58f8631c0 is located in stack of thread T0 at offset 192 in frame
    #0 0x40525f in test_threaded_unregistration ../../GNOME/glib/gio/tests/gdbus-export.c:1936

  This frame has 7 object(s):
    [32, 40) 'local_error' (line 1835)
    [64, 72) 'unregister_thread' (line 1836)
    [96, 104) 'value' (line 1838)
    [128, 136) 'value_str' (line 1839)
    [160, 168) 'call_result' (line 1840)
    [192, 204) 'object_registration_data' (line 1834) <== Memory access at offset 192 is inside this variable
    [224, 240) 'data' (line 1833)
2025-04-03 13:58:15 +02:00
Marco Trevisan (Treviño)
6ed59a6f40 gio/tests/gdbus-connection: Fix typo 2025-04-03 13:58:15 +02:00
Marco Trevisan (Treviño)
7086823bb2 cancellable: Connect to cancelled signal using the ID
Avoid fetching the signal-ID by its name since we know it here
2025-04-02 21:28:03 +02:00
Emmanuele Bassi
93371e1f56 Merge branch 'dbus-name-owning-docs' into 'main'
gdbusnameowning: Convert docs to gi-docgen linking syntax

See merge request GNOME/glib!4562
2025-04-02 13:10:05 +00:00
Patrick Griffis
cce3001d5d threadedresolver: Cache network interface checks 2025-04-01 19:11:49 -05:00
Philip Withnall
585ec33763
gwin32appinfo: Clarify some variable names
See the previous commit. Clarify these variable names so it’s more
obvious they contain a size in bytes rather than a length in wide-chars.

This introduces no functional changes.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3649
2025-04-01 16:05:44 +01:00
Philip Withnall
6f9bb9b784
gwin32registrykey: Clarify that value sizes are in bytes
It can be confusing otherwise when getting string values: is the size in
bytes or wide-characters?

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3649
2025-04-01 16:04:01 +01:00
Philip Withnall
464dd6fb6b
gwin32appinfo: Fix an incorrect size vs wide-length comparison
`value_size` is in bytes, whereas `ms_resource_prefix_len` is in wide
characters, so they cannot be compared directly. This meant that if
12 ≤ `value_size` < 24 then the call to `memcmp()` would read off the
end of `value`.

Fix it by using a wide-character and nul-aware comparison function and
operating only on wide-lengths. This is safe because
`g_win32_registry_key_get_value_w()` guarantees that string-typed return
values are nul-terminated.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Fixes: #3649
2025-04-01 15:50:00 +01:00
Patrick Griffis
fe0139ee98 threadedresolver: Return valid addresses when only having loopback interfaces
The AI_ADDRCONFIG flag filters out addresses for invalid interfaces. This causes it to resolve nothing when only having loopback interfaces.

So we can detect if you only have loopback interfaces, request all addresses, and filter out non-loopback results.

Closes #3641
2025-03-24 09:44:55 -05:00
Patrick Griffis
752b6447d8 socketaddress: Use more clear GSocketFamily type
The value of them should be identical, but it feels odd to
not pass the expected enum type.
2025-03-24 09:43:42 -05:00
Patrick Griffis
bbba92630b threadedresolver: Clean up variable scope
Keep the scope limited.
2025-03-24 09:43:42 -05:00
Philip Withnall
e7b820d66c
tests: Move various test paths to g_get_tmp_dir()
Rather than creating files in the current directory. This is a bit
neater, and avoids races between parallel invocations of the unit tests
if the file names aren’t guaranteed to be unique (e.g. by using
`g_mkstemp()`).

Add `G_TEST_OPTION_ISOLATE_DIRS` too, to make sure we use a unique
subdirectory of `g_get_tmp_dir()`. This means that paths like
`g_get_tmp_dir() / some-file` are guaranteed to be race-free even if the
filename is not unique, because the test tmp dir now is.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:49 +00:00
Philip Withnall
4d2b873211
tests: Use g_build_filename() rather than g_strdup_printf()
In the `g-file-info-filesystem-readonly` test.

This doesn’t introduce any functional changes, but makes the code a
little easier to read (because the parts of the path are now in
hierarchical order) and makes it a bit clearer that we’re building a
path rather than an arbitrary string.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:45 +00:00
Philip Withnall
4345eb2756
tests: Only use g_mkstemp() in /tmp rather than current directory
It’s not entirely clear from the documentation, but `g_mkstemp()` (and
`g_mkdtemp()`) operate in the current directory, rather than the system
temporary directory.

This meant these tests were all writing files to the build directory.
This is messy, though thankfully not a correctness issue or a race
because `g_mkstemp()` guarantees to return a unique file for each
caller.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:36 +00:00
Philip Withnall
581a0b1285
gfile: Document that g_file_make_directory() returns G_IO_ERROR_EXISTS
if the directory already exists.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:32 +00:00
Philip Withnall
20f083ea7c
giounix-private: Fix macro for checking for epoll_create1()
Like many things I touch, I broke this in
fd8ede0b661aa67032bbc3e7afc88aff22d7984a.

Spotted by Sebastian Wilhelmi in
fd8ede0b66 (note_2385263).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-20 11:12:58 +00:00
Philip Withnall
da12657e8b
gdbusnameowning: Convert docs to gi-docgen linking syntax
Improve formatting while I’m there, and try and ensure all the docs in
these two files matches the
[guidelines](https://developer.gnome.org/documentation/guidelines/devel-docs.html#writing-api-references).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3250
2025-03-19 20:41:47 +00:00
Philip Withnall
88e8ee515c Merge branch 'settings-docs' into 'main'
gsettings: Port docs to gi-docgen format, add missing annotations and make various improvements

See merge request GNOME/glib!4541
2025-03-19 20:18:34 +00:00
Philip Withnall
b0568c845d Merge branch 'file-info-docs' into 'main'
gfileinfo: Slightly expand docs for g_file_info_get_attribute_as_string()

See merge request GNOME/glib!4557
2025-03-19 20:05:06 +00:00
Lukáš Tyrychtr
aaf8097b73 Ensure we're printing UTF-8 2025-03-17 13:38:13 +01:00
Philip Withnall
787f47f091
gfileinfo: Slightly expand docs for g_file_info_get_attribute_as_string()
Inspired by !4556.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-14 15:27:08 +00:00
Lukáš Tyrychtr
6b2187b5ef gio-tool: Fix handling of the trash original path
Previously, we were getting the string representation. However, this
representation gets escaped, which breaks non-ascii characters, because we
were counting on the path being the original path, which was not true in
these cases.

Retrieve it rather as the byte string which it is.

Fixes #3636.
2025-03-14 13:46:55 +01:00
Philip Withnall
9fe6d8b5f0
tests: Disable socket-listener mock tests on macOS
Its symbol interposition works differently to that of Linux, so our
approach using `dlsym(RTLD_NEXT)` to inject syscalls (and still allow
chaining up to the version from libc) doesn’t work on macOS.

See https://gitlab.gnome.org/GNOME/glib/-/jobs/4861349 for an example
failure.

It would be lovely to have these tests working on macOS, but I am not a
macOS developer, and have spent enough time fixing this leak (#1250)
already. It can wait for follow-up work.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #1250
2025-03-13 13:25:19 +00:00
Philip Withnall
007c525d61
gsocketlistener: Minor cleanups to use g_clear_object() and friends
This should introduce no functional changes.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-13 13:25:13 +00:00
Philip Withnall
05e529f3f8
tests: Add tests for g_socket_listener_add_any_inet_port() algorithm
The algorithm that `g_socket_listener_add_any_inet_port()` and
`g_socket_listener_add_inet_port()` use to try to connect to IPv4 and/or
IPv6 ports are a bit complex (especially when port allocation has to
happen in the former method). So far they’ve not really been unit
tested, which is unfortunate, and has left latent bugs.

Add some unit tests for both methods, by providing mock `socket()` (and
friends) functions to override those from libc, and using those to cause
specific syscalls to fail according to the test’s needs.

These tests demonstrate the fix for #1250 works, as the tests can be run
under memcheck and show no memory leaks. They’ve revealed a follow-up
issue, though — `g_socket_listener_add_any_inet_port()` doesn’t try a
fallback IPv4-only socket if it tries an IPv6 socket and that socket
accepts IPv4 but then fails to `listen()`. I’ve filed issue #3604 for
that.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #1250
2025-03-13 13:25:06 +00:00
Philip Withnall
31546be3f8
build: Check for <netlink/netlink_route.h> for GNetworkMonitorNetlink
Apparently it’s possible for `netlink/netlink.h` to be available on
Linux, when we expected it to only be available on FreeBSD, but for
`netlink/netlink_route.h` to not exist. So add a check for the latter.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Fixes: #3630
2025-03-10 12:01:52 +00:00
Philip Withnall
30ed00b8e5 Merge branch 'test-fixes' into 'main'
tests: Minor fixes to reference and stream-rw_all tests

See merge request GNOME/glib!4540
2025-03-06 00:13:41 +00:00
Philip Withnall
49328baa83
gsettings: Fix a minor formatting problem in get_child() docs
gi-docgen didn’t nest the `<tt>` tags properly for `@name` inside a
longer backticks span.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-05 17:19:55 +00:00
Philip Withnall
517c5b4eed
gsettings: Improve documentation for delay-apply mode
Otherwise it looks a bit like calls to `delay()` and `apply()` need to
be paired, like calls to `g_object_freeze_notify()` and
`g_object_thaw_notify()`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-05 17:19:49 +00:00
Philip Withnall
b1066c6eb1
gsettings: Clarify settings types in docs
Since the docs are saying what type a key must be in the schema to be
able to call that method, it makes sense to give the type in the same
format used in the schema, i.e. a GVariant type string.

Also link to the `GVariantType` documentation so the user can read up on
it further if needed.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-05 17:19:42 +00:00
Philip Withnall
a964d0e7f4
gsettings: Convert docs to gi-docgen linking syntax
Improve formatting while I’m there, and try and ensure all the docs in
these two files matches the
[guidelines](https://developer.gnome.org/documentation/guidelines/devel-docs.html#writing-api-references).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3250
2025-03-05 17:19:36 +00:00
Philip Withnall
4f2877c502
gdebugcontrollerdbus: Fix a minor typo in a code example in the docs
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-04 16:29:23 +00:00
Philip Withnall
3920e0f172
tests: Fix an incorrect array length in stream-rw_all test
The array was declared one byte too short to contain the trailing nul
byte for the string literal. Spotted by gcc 15.

Fix it by allowing the compiler to work out the array length.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-04 14:20:48 +00:00
Philip Withnall
00ff3c6339
gsettings: Add missing (nullable) annotations to g_settings_bind_with_mapping()
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-04 13:36:59 +00:00
Philip Withnall
bfe3acd0e6
gsettings: Add a missing (nullable) annotation to GSettingsGetMapping
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-03 19:10:58 +00:00
Philip Withnall
b1764e2e94
gsettings: Add a missing (nullable) annotation to GSettingsBindSetMapping
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-03 19:08:33 +00:00
Philip Withnall
db26eb22fd Merge branch 'wip/refi64/fix-marshaller-args' into 'main'
gdbus-codegen: Fix callback GUnixFDList parameter order

See merge request GNOME/glib!4524
2025-02-27 14:21:43 +00:00
Ryan Gonzalez
04ecfa9a30 gdbus-codegen: Fix callback GUnixFDList parameter order
GUnixFDList actually comes *after* the GDBusMethodInvocation, but this
was mistakenly putting it first.

Signed-off-by: Ryan Gonzalez <ryan.gonzalez@collabora.com>
2025-02-26 17:06:46 -06:00
Reuben Thomas
e99dbb943b doc: remove unnecessary and confusing code from examples
Three of the four GApplicationCommandLine examples contained this line:

  g_application_set_inactivity_timeout (app, 10000);

It is not explained (which could be confusing for readers trying to
understand the examplese), or necessary. Worse, it causes two of the
examples to pause for ten seconds if they are invoked with no command-line
arguments, which makes them seem broken (and would presumably be reported
as a bug in any real application).

So, remove these calls.

Fixes #3615
2025-02-26 21:48:30 +00:00