Commit Graph

23933 Commits

Author SHA1 Message Date
Philip Withnall
149e5c5159 gfileutils: Correctly reset start value when canonicalising paths
If a path starts with more than two slashes, the `start` value was
previously incorrect:
 1. As per the `g_path_skip_root()` call, `start` was set to point to
    after the final initial slash. For a path with three initial
    slashes, this is the character after the third slash.
 2. The canonicalisation loop to find the first dir separator sets
    `output` to point to the character after the first slash (and it
    overwrites the first slash to be `G_DIR_SEPARATOR`).
 3. At this point, with a string `///usr`, `output` points to the second
    `/`; and `start` points to the `u`. This is incorrect, as `start`
    should point to the starting character for output, as per the
    original call to `g_path_skip_root()`.
 4. For paths which subsequently include a `..`, this results in the
    `output > start` check in the `..` loop below not skipping all the
    characters of a preceding path component, which is then caught by
    the `G_IS_DIR_SEPARATOR (output[-1])` assertion.

Fix this by resetting `start` to `output` after finding the final slash
to keep in the output, but before starting the main parsing loop.

Relatedly, split `start` into two variables: `after_root` and
`output_start`, since the variable actually has two roles in the two
parts of the function.

Includes a test.

This commit is heavily based on suggestions by Sebastian Wilhemi and
Sebastian Dröge.

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

oss-fuzz#41563
2021-12-02 18:47:39 +00:00
Philip Withnall
96bccb89df gfileutils: Add a comment in g_canonicalize_filename()
Clarify the code a little. This introduces no functional changes.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-12-02 18:47:39 +00:00
Quentin PAGÈS
711efa507b Update Occitan translation 2021-12-02 15:05:45 +00:00
Sebastian Dröge
541114846d Merge branch 'backport-2265-unregistration-race-glib-2-70' into 'glib-2-70'
Backport !2265 “gdbusconnection: Fix race between method calls and object unregistration” to glib-2-70

See merge request GNOME/glib!2312
2021-12-02 10:12:20 +00:00
Philip Withnall
e8228314e1 Merge branch 'backport-2374-canonicalize-filename-glib-2-70' into 'glib-2-70'
Backport !2374 “gfileutils: Improve performance of g_canonicalize_filename()” to glib-2-70

See merge request GNOME/glib!2375
2021-11-30 10:08:11 +00:00
Sebastian Wilhelmi
28a15f95c4 gfileutils: Improve performance of g_canonicalize_filename()
Improve the performance of canonicalising filenames with many `..` or
`.` components, by modifying the path inline rather than calling
`memmove()`.

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

Fixes: #2541
2021-11-30 09:42:38 +00:00
Aleksandr Melman
b7cec3d9f0 Update Russian translation 2021-11-28 15:20:58 +00:00
Piotr Drąg
816d4c3000 Update Polish translation 2021-11-28 13:54:06 +00:00
Enrico Nicoletto
399b88ee12 Update Brazilian Portuguese translation 2021-11-26 10:16:14 +00:00
Hugo Carvalho
4b4f6119c3 Update Portuguese translation 2021-11-25 13:44:39 +00:00
Anders Jonsson
b3a333814d Update Swedish translation 2021-11-24 16:24:14 +00:00
Sebastian Dröge
12b613b582 Merge branch 'backport-2364-freebsd-objcopy-glib-2-70' into 'glib-2-70'
Backport !2364 “tests: Allow `objcopy --help` to fail, because it fails on FreeBSD” to glib-2-70

See merge request GNOME/glib!2366
2021-11-24 15:50:52 +00:00
Philip Withnall
05340ad8b4 tests: Allow objcopy --help to fail, because it fails on FreeBSD
This is a partial revert of b248f3481c. Eventually, this commit can be
dropped once `objcopy --help` doesn’t exit with a non-zero status on
FreeBSD.

See: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2360#note_1318608

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-11-24 15:20:25 +00:00
Sebastian Dröge
3562c9e16d Merge branch 'backport-2360-meson-check-glib-2-70' into 'glib-2-70'
Backport !2360 “meson: specify when commands need to succeed in run_command” to glib-2-70

See merge request GNOME/glib!2363
2021-11-24 10:53:59 +00:00
Eli Schwartz
f80da352c9 meson: specify when commands need to succeed in run_command
meson in git master now warns about a missing `check:` kwarg, and may
eventually change the default from false to true.

Take the opportunity to require `objcopy --help` to succeed -- it is
unlikely to fail, but if it does something insane happened.
2021-11-24 10:32:30 +00:00
Philip Withnall
485dd16dc1 Merge branch 'improve-win32-version-2-70' into 'glib-2-70'
gutils.c: Improve g_get_os_info() for Windows 10/Server 2019+

See merge request GNOME/glib!2359
2021-11-24 10:29:27 +00:00
Yuri Chornoivan
0b021116b9 Update Ukrainian translation 2021-11-24 10:27:12 +00:00
Sebastian Dröge
a911cf837a Merge branch 'backport-2354-test-dbus-glib-2-70' into 'glib-2-70'
Backport !2354 “gtestdbus: Print the dbus address on a specific FD intead of stdout” to glib-2-70

See merge request GNOME/glib!2361
2021-11-24 10:24:28 +00:00
Marco Trevisan (Treviño)
5afc7d5b77 gtestdbus: Print the dbus address on a specific FD intead of stdout
We used to use a pipe for the dbus daemon stdout to read the defined
address, but that was already requiring a workaround to ensure that dbus
daemon children were then able to write to stdout.
However the current implementation is still causing troubles in some
cases in which the daemon is very verbose, leading to hangs when writing
to stdout.

As per this, just don't handle stdout ourself, but use instead a
specific pipe to get the address address. That can now be safely closed
once we've received the data we need.

This reverts commit d80adeaa96.

Fixes: #2537
2021-11-24 09:54:25 +00:00
Chun-wei Fan
e5917c67ba gutils.c: Improve Windows 10/Server 2019 20H2+ detection
This improves how we obtain the Windows release versions in
get_windows_version(), in turn g_get_os_info() for Windows 10/Server
2019 20H2 (2009) and later and Windows 11, by doing the following:

*  Check the build number for non-server versions of Windows.
   For Windows 11, the build number is 22000+, so we now correctly
   indicate on Windows 11 that we are indeed running Windows 11.
*  Check the DisplayVersion entry in the registry under
   SOFTWARE\Microsoft\Windows NT\CurrentVersion if we obtained "2009"
   from the ReleaseId entry, since DisplayVersion replaces ReleaseId
   after Windows 10/Server 2019 20H2 (2009).  This makes things more
   clear for Windows releases after 20H2, where previously 20H2
   and 21H1 were all identified as Windows 10 [Server] 2009.

This should fix issue #2443.
2021-11-24 10:44:16 +08:00
Chun-wei Fan
2e99a15291 gwin32.c: Split out call to RtlGetVersion()
Unfortunately, we may well be likely to need to call RtlGetVersion() via
GetModuleHandle() + GetProcAddress(), so split out the call to RtlGetVersion()
into a private function of its own, so that we can reuse the same code in other
parts of GLib, so that we can:

*  Determine better in a more fine-tuned way to determine whether we are on
   Windows 10/11 and/or Server 2016/2019/2022, since we need to rely on the
   build number.

*  Just call RtlGetVersion() once, when needed, as that is all that is needed.
   We could re-use the same function once to compare what we got when we
   called RtlGetVersion() and do what is necessary there.
2021-11-24 10:44:01 +08:00
Philip Withnall
0926864f6f Merge branch 'backport-2355-dbus-message-truncation-glib-2-70' into 'glib-2-70'
Backport !2355 “gdbusmessage: Add more bounds checking when parsing D-Bus messages” to glib-2-70

See merge request GNOME/glib!2356
2021-11-23 13:26:00 +00:00
Philip Withnall
a5f53c7d00 gdbusmessage: Remove arbitrary restriction on minimum D-Bus blob length
The code in `g_dbus_message_new_from_blob()` has now been fixed to
correctly error out on all truncated messages, so there’s no need for an
arbitrary programmer error if the input is too short to contain a valid
D-Bus message header.

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

Helps: #2528
2021-11-23 12:59:20 +00:00
Sebastian Wilhelmi
0956ef613a tests: Add test cases for truncated D-Bus messages
(Minor code formatting tweaks and leak fixes by Philip Withnall.)

Helps: #2528
2021-11-23 12:59:20 +00:00
Sebastian Wilhelmi
a7f7880b86 gdbusmessage: Add more bounds checking when parsing D-Bus messages
Perform strict bounds checking when reading data from the D-Bus message,
and propagate errors to the callers.

Previously, truncated D-Bus messages could cause out-of-bounds reads.

This is a security issue, but one which is only exploitable when
communicating with an untrusted peer (who might send malicious
messages). Almost all D-Bus traffic is with a session or system bus,
where the dbus-daemon or dbus-broker is trusted, and is known to have
already rejected malformed (malicious) messages.

Accordingly, this is only exploitable with peer-to-peer D-Bus
conversations with an untrusted peer.

(Includes some minor cleanups from Philip Withnall.)

oss-fuzz#17408
Fixes: #2528
2021-11-23 12:59:20 +00:00
Sebastian Dröge
eba304f9ca Merge branch 'backport-2327-uri-normalization-glib-2-70' into 'glib-2-70'
Backport !2327 “guri: Improve performance of remove_dot_segments() algorithm” to glib-2-70

See merge request GNOME/glib!2344
2021-11-22 13:57:58 +00:00
Sebastian Wilhelmi
d4ef27b3ba guri: Improve performance of remove_dot_segments() algorithm 2021-11-17 15:22:48 +00:00
Sebastian Dröge
ae0a0d0dd5 Merge branch 'backport-2338-journald-namespaced-glib-2-70' into 'glib-2-70'
Backport !2338 “gmessages: Support namespaced journals” to glib-2-70

See merge request GNOME/glib!2340
2021-11-16 16:26:49 +00:00
Philip Withnall
04507fcaff gmessages: Support namespaced journals
Spotted and diagnosed by Ilya Basin.

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

Fixes: #2530
2021-11-16 15:15:29 +00:00
Sebastian Dröge
54130f153a Merge branch 'backport-2325-macos-settings-fix-glib-2-70' into 'glib-2-70'
Backport !2325 “Fix GSettings dict error macOS” to glib-2-70

See merge request GNOME/glib!2337
2021-11-16 15:00:01 +00:00
Maurice
8035c5a37f Fix GSettings dict error macOS 2021-11-16 14:22:19 +00:00
Emmanuele Bassi
5d67d83046 Merge branch 'backport-2324-pcre-tarball-glib-2-70' into 'glib-2-70'
Backport !2324 “Fix link to pcre-8.37.tar.bz2” to glib-2-70

See merge request GNOME/glib!2335
2021-11-16 13:04:41 +00:00
Albert Astals Cid
529c4eb312 Fix link to pcre-8.37.tar.bz2
ftp.pcre.org FTP site is no longer available
2021-11-16 12:45:39 +00:00
Xavier Claessens
397f8b6253 Merge branch 'backport-2309-pcre-blah-blah-glib-2-70' into 'glib-2-70'
Backport !2309 “Rename libpcre.wrap to pcre.wrap” to glib-2-70

See merge request GNOME/glib!2316
2021-11-11 17:00:37 +00:00
Goran Vidović
c6e9028f09 Update Croatian translation 2021-11-11 09:46:23 +00:00
Milo Casagrande
46737f3702 Update Italian translation 2021-11-09 08:15:31 +00:00
Sebastian Dröge
a28c93003b Merge branch 'backport-2161-delayed-settings-null-handling-glib-2-70' into 'glib-2-70'
Backport !2161 “gdelayedsettingsbackend: Fix applying after calling g_settings_reset()” to glib-2-70

See merge request GNOME/glib!2320
2021-11-04 10:52:37 +00:00
Philip Withnall
e665cc94c4 gsettings: Drop internal delayed member
This introduces no functional changes; it only simplifies the code.

Instead of maintaining a separate pointer to the backend iff it’s a
`GDelayedSettingsBackend`, just test the `backend` pointer’s type.

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

Helps: #2426
2021-11-04 10:21:13 +00:00
Philip Withnall
f941329b56 gsettings: Clarify that g_settings_get_child() inherits delay-apply
Previously, the delay-apply status of the parent `GSettings` object
would be partially inherited: `settings->priv->backend` in the child
`GSettings` object would point to a `GDelayedSettingsBackend`, but
`settings->priv->delayed` would be `NULL`.

The expectation from https://bugzilla.gnome.org/show_bug.cgi?id=720891
was that `get_child()` would fully inherit delay-apply status.

So, ensure that `settings->priv->delayed` is correctly set to point to
the delayed backend when constructing any `GSettings`. Update the tests
to work again (presumably the inverted test was an oversight in the
original changes).

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

Fixes: #2426
2021-11-04 10:21:11 +00:00
Philip Withnall
51e16afcbf gsettings: Improve documentation formatting slightly
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-11-04 10:20:35 +00:00
Philip Withnall
62a1f3b9b5 tests: Use a helper macro to drop redundant code in gsettings test
This introduces no functional changes.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-11-04 10:20:35 +00:00
Philip Withnall
21b1767af6 gdelayedsettingsbackend: Fix applying after calling g_settings_reset()
`g_settings_reset()` changes the value of the setting to `NULL`;
`add_to_tree()` was not handling that correctly.

Add a unit test.

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

Fixes: #2426
2021-11-04 10:20:35 +00:00
Xavier Claessens
562295c286 Rename libpcre.wrap to pcre.wrap
It is exactly the same wrap as the one in WrapDB but with a different
name. That fix error when multiple projects uses pcre and they don't
have the same wrap name:

meson.build:1:0: ERROR: Multiple wrap files provide 'libpcre' dependency: pcre.wrap and libpcre.wrap
2021-11-01 18:24:26 +00:00
Philip Withnall
eaf3169a4b Merge branch 'backport-2260-win32-registry-assert-glib-2-70' into 'glib-2-70'
Backport !2260 “GWin32AppInfo: Remove assertion on the opened registry key” to glib-2-70

See merge request GNOME/glib!2313
2021-11-01 15:34:54 +00:00
Philip Withnall
0b14fd8b47 tests: Add D-Bus object/subtree unregistration tests
These tests cover the fixes from the previous two commits.

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

Helps: #2400
2021-11-01 14:48:19 +00:00
Philip Withnall
a427344558 gdbusconnection: Fix race between subtree method call and unregistration
Fix another variant of the previous commit, this time specific to the
idle callback of a method call on a subtree object, racing with
unregistration of that subtree.

In this case, the `process_subtree_vtable_message_in_idle_cb()` idle
callback already has a pointer to the right `ExportedSubtree` struct,
but again doesn’t have a strong reference to it.

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

Helps: #2400
2021-11-01 14:48:19 +00:00
Philip Withnall
5e6d000501 gdbusconnection: Fix race between method calls and object unregistration
If `g_dbus_connection_unregister_object()` (or `unregister_subtree()`)
was called from one thread, while an idle callback for a method call (or
a property get or set) was being invoked in another, it was possible for
the two to race after the idle callback had checked that the
object/subtree was registered, but before it had finished dereferencing
all the data related to that object/subtree.

Unregistering the object/subtree would immediately free the data,
leading the idle callback to cause a use-after-free error.

Fix that by giving the idle callback a strong reference to the data from
inside the locked section where it checks whether the object/subtree is
still registered.

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

Fixes: #2400
2021-11-01 14:48:19 +00:00
Philip Withnall
309e7428b5 gdbusconnection: Make ExportedInterface/ExportedSubtree refcounted
This is needed for an upcoming change which decouples their lifecycle
from their presence in the `map_id_to_ei` and `map_id_to_es` hash
tables.

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

Helps: #2400
2021-11-01 14:48:19 +00:00
Philip Withnall
4348d35bd6 gdbusconnection: Add some ownership annotations
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-11-01 14:48:19 +00:00
Philip Withnall
93eefb3e22 gdbusconnection: Move ExportedSubtree definition
Move it further up the file, but make no changes to it. This will help
with a subsequent commit.

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

Helps: #2400
2021-11-01 14:48:19 +00:00