Commit Graph

27687 Commits

Author SHA1 Message Date
Marc-André Lureau
f50a4f8501 tests/desktop-app-info: fix stack-use-after-scope
Fix the tests, by allocating the structure.

==121338==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7ffe44018610 at pc 0x00000040ff71 bp 0x7ffe440178f0 sp 0x7ffe440178e8
READ of size 8 at 0x7ffe44018610 thread T0
    #0 0x40ff70 in test_launch_uris_with_terminal ../gio/tests/desktop-app-info.c:1393
    #1 0x7efd97b831e8 in test_case_run ../glib/gtestutils.c:2947
    #2 0x7efd97b831e8 in g_test_run_suite_internal ../glib/gtestutils.c:3037
    #3 0x7efd97b82d23 in g_test_run_suite_internal ../glib/gtestutils.c:3056
    #4 0x7efd97b82d23 in g_test_run_suite_internal ../glib/gtestutils.c:3056
    #5 0x7efd97b82d23 in g_test_run_suite_internal ../glib/gtestutils.c:3056
    #6 0x7efd97b84189 in g_test_run_suite ../glib/gtestutils.c:3136
    #7 0x7efd97b842c5 in g_test_run ../glib/gtestutils.c:2248
    #8 0x4055bc in main ../gio/tests/desktop-app-info.c:1901
    #9 0x7efd9564a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f)
    #10 0x7efd9564a5c8 in __libc_start_main_alias_1 (/lib64/libc.so.6+0x275c8)
    #11 0x4059f4 in _start (/home/elmarco/src/gnome/glib/build/gio/tests/desktop-app-info+0x4059f4)

Address 0x7ffe44018610 is located in stack of thread T0 at offset 128 in frame
    #0 0x404d1f in main ../gio/tests/desktop-app-info.c:1823

  This frame has 6 object(s):
    [48, 52) 'argc' (line 1821)
    [64, 72) 'path' (line 1870)
    [96, 104) 'argv' (line 1822)
    [128, 144) '<unknown>' <== Memory access at offset 128 is inside this variable
    [160, 176) '<unknown>'
    [192, 288) 'supported_terminals' (line 1825)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2023-01-24 23:43:20 +04:00
Philip Withnall
1507585869 tests: Temporarily disable socket test due to a kernel bug
There’s a kernel bug on the CI machines which is causing this test to
fail all the time and it’s getting my goat.

The test can be re-enabled later (by reverting this commit) when the
kernel on the CI VM host is fixed. I don’t know when that’s going to
happen.

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

Helps: #2879
2023-01-24 11:46:25 +00:00
Philip Withnall
2676ef03cc gtestutils: Fix a potential NULL pointer dereference in g_test_log()
Although unlikely, apparently `message` may be `NULL` (the rest of the
code checks for it), so the code to convert newlines to spaces should
probably also check for `NULL`.

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

Coverity CID: #1504054
2023-01-24 11:33:18 +00:00
Philip Withnall
73205b8bbd tests: Explicitly remove a timeout handler in gapplication test
Otherwise if, for whatever reason, the `app` loses its D-Bus name,
`g_application_quit()` is called from `name_was_lost()` before it’s
called from `quit_already()`, and then `quit_already()` does an invalid
read on `app`.

If the name was not meant to be lost at this point in the test, the
subsequent `g_assert_false (name_lost)` will catch that, so this change
shouldn’t cause the test to pass unnecessarily.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-01-24 11:25:34 +00:00
Philip Withnall
90af624d5b glib.supp: Add suppression for the one-time allocation in g_get_tmp_dir()
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-01-24 11:20:35 +00:00
Philip Withnall
41bd0fddcd glib.supp: Further ignore system thread allocations
This should stop the following valgrind error:
```
==14506== 80 bytes in 1 blocks are definitely lost in loss record 1,098 of 1,463
==14506==    at 0x484086F: malloc (vg_replace_malloc.c:381)
==14506==    by 0x48C5D83: g_malloc (gmem.c:130)
==14506==    by 0x48E7911: g_slice_alloc (gslice.c:1074)
==14506==    by 0x48E7951: g_slice_alloc0 (gslice.c:1100)
==14506==    by 0x493617D: g_system_thread_new (gthread-posix.c:1188)
==14506==    by 0x48F9EAA: g_thread_new_internal (gthread.c:935)
==14506==    by 0x48F9E29: g_thread_try_new (gthread.c:919)
==14506==    by 0x48FA351: g_thread_pool_spawn_thread (gthreadpool.c:312)
==14506==    by 0x48F9D2C: g_thread_proxy (gthread.c:831)
==14506==    by 0x4EFA2A4: start_thread (in /usr/lib64/libpthread-2.33.so)
==14506==    by 0x4D89322: clone (in /usr/lib64/libc-2.33.so)
```

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-01-24 11:20:04 +00:00
Philip Withnall
20c4fcb2a7 Merge branch '2891-2892-win32-leaks' into 'main'
gwin32: Fix two minor string leaks

Closes #2891 and #2892

See merge request GNOME/glib!3222
2023-01-23 12:54:16 +00:00
Philip Withnall
e23ea40aaa gwin32: Fix two minor string leaks
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Fixes: #2891, #2892
2023-01-23 11:50:34 +00:00
Sabri Ünal
34c5a689b5 Update Turkish translation 2023-01-22 19:15:45 +00:00
Michael Catanzaro
ce876ab28b Merge branch 'threadpool-shared-thread-prios' into 'main'
GThreadPool: Always use the thread-spawning thread for the global shared thread pool

Closes #2769

See merge request GNOME/glib!3208
2023-01-20 19:00:49 +00:00
Vasil Pupkin
1be25e6015 Update Belarusian translation 2023-01-20 16:55:45 +00:00
Philip Withnall
e86e559a0f Merge branch 'meson-use-tap-protocol-improvements' into 'main'
TAP: some further cleanups

See merge request GNOME/glib!3221
2023-01-20 15:24:50 +00:00
Marco Trevisan (Treviño)
a8f56c5be1 ci: Use verbose output in meson by default
Now that we're using TAP parsing, this will show subtest failures in
details but without showing any logging error, that we'd still need to parse
from actual logs.
2023-01-20 15:41:17 +01:00
Marco Trevisan (Treviño)
a707cebcd9 gtestutils: Improve TAP reporting on tests failures
When we've a failure our TAP reporting just bails out without that is clear
what is the test that has failed.

So in this case, expose a "not ok" message if the test name is known, and
use it to report the error message too if available.

Otherwise just use the same Bail out! strategy.
2023-01-20 15:28:58 +01:00
Marco Trevisan (Treviño)
d8e4c1a8f8 gtestutils: Do not make a subtest to Bail out! the root one
This is something that a base test should decide, so if a subtest fails it's
up to the caller to decide whether to bail out the whole suite or just the
subtest.
2023-01-20 15:27:27 +01:00
Marco Trevisan (Treviño)
f5f09445b8 gtestutils: Define TAP version clearly as defined value
As we do in tests
2023-01-20 15:23:59 +01:00
Philip Withnall
e6fbd2afa6 Merge branch 'meson-use-tap-protocol' into 'main'
meson: Use 'tap' test protocol and support TAP 13/14

See merge request GNOME/glib!3140
2023-01-20 13:45:12 +00:00
Marco Trevisan (Treviño)
6a4f6c593c gsettings: Skip tests in the proper way
This will make TAP happier in reporting what's wrong
2023-01-20 14:10:08 +01:00
Marco Trevisan (Treviño)
03f5d0b060 gtestutils: Use test print handler to write subprocess output
When using verbose logging, all the printing and the glib info and debug
logs may end up being written in standard out, making meson TAP parser to be
confused and to fail with TAP parsing errors.

So, in such case write the subprocess output all at once using the the gtest
printer so that we add proper formatting.

Also do not write any gtest result message for subprocesses
2023-01-20 14:10:08 +01:00
Marco Trevisan (Treviño)
8b7b5f5457 gtestutils: Define a custom g_print handler for TAP
When using TAP output in gtest, all the printed strings should be commented
not to break the spec, so enforce this at GTest level, by ensuring that
all the lines written via g_print() will be in the commented form and will
respect the subtest indentation.

As per this we can remove some custom code in g_test_log() as now there are
very few cases in which we need to use the default print handler which is
now private when testing.
2023-01-20 14:10:08 +01:00
Marco Trevisan (Treviño)
3d1736c828 gmessages: Make print handler functions to return default handlers
g_set_print_handler() and g_set_printerr_handler() are supposed to return
the old printer handlers, but in case the default is used NULL is returned
instead.

This makes hard to override the default handler to e.g. decorate the output
with some minor content, without having to rewrite the low-level
implementation.

So, make the default printers to be functions and set them as the default
ones. Also this avoids having to check each time what function to use at
print time.
2023-01-20 14:06:23 +01:00
Marco Trevisan (Treviño)
5d91834d9b gtestutils: Do not generate the random seed if provided
There's no point to generate a seed if we're going to overwrite it when
--seed is used.
2023-01-20 14:06:23 +01:00
Marco Trevisan (Treviño)
871c4b4698 spawn-test-win32-gui: Write state to stderr
Makes TAP happier
2023-01-20 14:06:23 +01:00
Marco Trevisan (Treviño)
1daf05ecda gpoll: Print results to stderr
This will make it compatible with TAP reporting.
2023-01-20 14:06:23 +01:00
Marco Trevisan (Treviño)
04e8c8c719 gio/tests/gsettings: Write subprocess stdout as test message
This won't confuse the meson TAP parser.
2023-01-20 14:06:23 +01:00
Marco Trevisan (Treviño)
49a115d6db tests/logging, testing: Add more tests for cases enforcing gmessages on stderr 2023-01-20 14:06:23 +01:00
Philip Withnall
7514efab05 Merge branch 'gstring-free-and-steal' into 'main'
Add g_string_free_and_steal

See merge request GNOME/glib!3219
2023-01-19 14:47:14 +00:00
Matthias Clasen
58dd3d3965 Add g_string_free_and_steal 2023-01-19 14:47:11 +00:00
Philip Withnall
30d11c4366 Merge branch 'ossfuzz-54577-variant-text-optimisation' into 'main'
gvariant: Optimise g_variant_print() for nested maybes

Closes #2862

See merge request GNOME/glib!3213
2023-01-18 12:40:43 +00:00
Philip Withnall
5283a169d9 gvariant: Remove some unnecessary type assertions on a hot path
While checking the validity of a `GVariantTypeInfo` is good, this code
path is very hot, and I’ve never seen these assertions catch a bug in
practice.

Lean more towards the performance side of the performance/correctness
tradeoff in this case, by removing the assertions here.

They remain in place in a number of other `GVariantTypeInfo` code paths,
so invalid `GVariantTypeInfo` pointers should hopefully still be caught
quickly.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-01-18 12:12:15 +00:00
Philip Withnall
fa17060027 gvariant: Remove redundant g_variant_serialised_n_children() calls
These functions were previously calling
`g_variant_serialised_n_children()` twice just to validate the input, in
the case that the input was a serialised variant.

That’s not necessary, and checking the number of children in a
serialised variant is not necessarily cheap.

Move the checks around so that the number of children is only checked
once on each code path. This doesn’t introduce any functional changes.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-01-18 12:12:15 +00:00
Philip Withnall
a1213e343e gvariant: Optimise g_variant_print() for nested maybes
As with commit 9ae59bd647, deeply nested
maybes in an array can be exploited by a malicious caller to cause a
geometric increase in processing time and number of `GVariant` instances
handled by the `g_variant_print()` code.

Optimise this by skipping recursing through most of the chain of maybes,
thus avoiding all the setup checks in each recursive call.

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

oss-fuzz#54577
2023-01-18 12:12:12 +00:00
Marco Trevisan
82da45c465 Merge branch 'string-test-leak' into 'main'
tests: Fix a minor leak in the GString tests

See merge request GNOME/glib!3207
2023-01-17 21:55:20 +00:00
Marco Trevisan (Treviño)
b3fd737eaa gmessages: Share the same logic to pick the output for log level
Use the very same logic in both the fallback handler and the default handler
2023-01-17 21:10:47 +01:00
Marco Trevisan (Treviño)
ed8810216a gio/tests: Use default log writer to stderr for launched processes
We don't want to bother TAP parser with subprocess messages when using
verbose logging, so let's just use stderr by default.
2023-01-17 21:08:49 +01:00
Xavier Claessens
19c7d4f15e tests: Use g_test_message() in gdatetime tests 2023-01-17 21:08:49 +01:00
Xavier Claessens
c00135ec73 gtestutils: Do not use default log handler when using TAP
Only use g_test_log() because it will prepend `#` to log messages when
using TAP protocol. Meson >=1.0 rightfully prints a warning when using
TAP protocol and stdout contains non-comment unknown TAP command.
2023-01-17 21:08:49 +01:00
Marco Trevisan (Treviño)
f893df4b7d gtestutils: Use TAP 13 comments syntax for subtests
Sadly meson 60 doesn't support parsing TAP 14 subtests properly, so it would
fail.

So temporary go back to the previous logic in a simple way so that this
commit can be reverted quickly when we can use a newer meson version.
2023-01-17 21:08:49 +01:00
Marco Trevisan (Treviño)
28b73434be gtestutils: Use TAP version 14 Subtests syntax to show subtests output
Instead of just commenting all the output of sub-processes we can just use
the TAP 14 syntax for subtests, by using 4-spaces to indent the subtests
output.

This may not work perfectly when there are sub-process that may write
output mixed with the parent, but it should be enough to expose the
hierarchy.
2023-01-17 21:08:49 +01:00
Marco Trevisan (Treviño)
9cfae23915 gtestutils: Do not allow newlines in Bail out! messages
It would break TAP parsing, so let's just print all inline
2023-01-17 21:08:49 +01:00
Marco Trevisan (Treviño)
a3f26bd509 testing: Add TAP test for Bail out! messages 2023-01-17 21:08:49 +01:00
Marco Trevisan (Treviño)
07ff0f7460 gtestutils: Print commented TAP output if running a subprocess
If a gtest process is run as a child of another process, we should not print
the TAP output in plain mode or we'll break the parent results.

We can instead just comment their output so that it gets ignored by TAP
parsers.
2023-01-17 21:08:49 +01:00
Xavier Claessens
28299eb467 gtestutils: "Bail out!" TAP message cannot be multiline
Extra lines must be prepended with `#` which g_test_message() does for
us. Note that lines after "Bail out" are ignored, so we print
stdout/stderr before.
2023-01-17 21:08:49 +01:00
Marco Trevisan (Treviño)
250f3f0644 gtestutils: Write g_test_message() output in a single operation
Do not write it in multiple lines, to ensure it's going to be written
all together, and nothing else could be written in the middle.

Also optimize a bit the code.
2023-01-17 21:08:48 +01:00
Marco Trevisan (Treviño)
78a206f467 tests/testing, testing-helper: Add test to check g_test_message on TAP
Ensure that g_test_message() output is conformant to TAP specifications.
2023-01-17 21:08:48 +01:00
Marco Trevisan (Treviño)
f68c49102e gtestutils: Write log to stderr atomically
We used to send the test log to stderr in pieces, but this could be
problematic when running multiple tests in parallel, so let's just prepare
the string in pieces and write it all at once.
2023-01-17 21:08:48 +01:00
Marco Trevisan (Treviño)
a943d42104 gtestutils: Use TAP format for all the verbose output
In some cases if verbose output was enabled we were using wrong output
format in TAP mode, so let's fix these cases and run the 'testing' test
case in --verbose mode to ensure we won't regress.
2023-01-17 21:08:48 +01:00
Marco Trevisan (Treviño)
5c799ff01d gtestutils: Write tap test results atomically
When running multiple tests in parallel using meson, the output could be
mixed and if we write the TAP reports in multiple steps the output could
be mangled together with other results.

An example is: https://gitlab.gnome.org/3v1n0/glib/-/jobs/2507620

Where we have:
  ok 5 /cancellable/poll-fd# GLib-GIO-DEBUG: Collecting capable appnames: 0ms
  # Allocating hashtables:...... 0ms
  # Reading capable apps:        63ms
  # Reading URL associations:... 0ms
  # Reading extension assocs:    78ms
  # Reading exe-only apps:...... 47ms
  # Reading classes:             312ms
  # Reading UWP apps:            47ms
  # Postprocessing:..............16ms
  # TOTAL:                       563ms
   # SKIP Platform not supported

Leading to a clear TAP parsing error
2023-01-17 21:08:48 +01:00
Marco Trevisan (Treviño)
254c71e7c6 gtestutils: Set the TAP version 13 as first line of tests output
This is not required, but meson may warn about in future versions, so it's
safer to define it.

However, we must be sure that we only expose it once and in the root binary
if a test file launches another subprocess test file.
To avoid this, we set an environment variable at test init, so that it can
be inherited by children.
It's not the best solution, but for sure the best-effort one without having
to change gtest arguments and called binaries.

Non mentioning a version was considered as assuming we were using TAP
version 12, while no version earlier than 13 can be specified
explicitly so let's use it.

See: https://testanything.org/tap-specification.html
And: https://testanything.org/tap-version-13-specification.html
2023-01-17 21:08:48 +01:00
Marco Trevisan (Treviño)
d4088e7f2a gio: Use 'cpp' suite for C++ tests
That's what we use for all the tests, so be consistent.
2023-01-17 21:08:48 +01:00