Commit Graph

7139 Commits

Author SHA1 Message Date
Philip Withnall
885d65077e tests: Only run g_error_new_valist() programmer error test on Linux
On FreeBSD it always crashes due to the platform’s `vasprintf()`
implementation being less forgiving than Linux’s. That’s fine.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-01-07 16:17:28 +00:00
Philip Withnall
5000193cf3 tests: Ignore -Wformat-nonliteral warning in new GError tests
See !1861.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-01-07 15:47:59 +00:00
Philip Withnall
2cbcb2bda5 tests: Add various tests to bring GError coverage up to 100%
This is mostly to cover historic code, but also includes a couple of
additional tests for extended error domains (see #14).

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-01-06 17:54:30 +00:00
Philip Withnall
e233859544 gerror: Drop a redundant condition
At this point, if `dest` is non-`NULL` then we can guarantee
`*dest != NULL` due to `g_propagate_error()` succeeding.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-01-06 17:24:00 +00:00
Philip Withnall
7f7512b62e gerror: Drop a redundant branch
At this point, `src` is guaranteed to be non-`NULL` due to the
	precondition check.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-01-06 17:23:31 +00:00
Philip Withnall
8a5cc02142 Merge branch 'extended-error' into 'master'
Extended error

See merge request GNOME/glib!1304
2021-01-06 16:02:27 +00:00
Krzesimir Nowak
80014804e2 gerror: Inform valgrind about our memory trickery
This is mostly duplicated code from gtype.c.
2021-01-06 15:44:59 +00:00
Krzesimir Nowak
ae72f9de35 gerror: Add support for extended errors
This commit adds a G_DEFINE_EXTENDED_ERROR macro and
g_error_domain_register() functions to register extended error
domains.
2021-01-06 15:44:59 +00:00
Sebastian Dröge
609d1e292f Merge branch 'fix/android-system-checks' into 'master'
build: Fix Android system checks

See merge request GNOME/glib!1856
2021-01-06 08:34:52 +00:00
Sebastian Dröge
179679837b Merge branch 'fix/assert-not-reached-on-msvc' into 'master'
gtestutils: Fix g_assert_not_reached() on MSVC

See merge request GNOME/glib!1857
2021-01-06 08:32:58 +00:00
Sebastian Dröge
1810761d8e Merge branch 'fix/always-use-windows-unicode-apis' into 'master'
gwin32: Always use unicode APIs

See merge request GNOME/glib!1848
2021-01-06 08:26:18 +00:00
Sebastian Dröge
82d3b49438 Merge branch 'feature/clang-native-mutex' into 'master'
gthread: Port native mutex to Clang

See merge request GNOME/glib!1842
2021-01-06 08:11:02 +00:00
Ole André Vadla Ravnås
d35a606852 gtestutils: Fix g_assert_not_reached() on MSVC
When building with G_DISABLE_ASSERT.
2021-01-06 01:17:31 +01:00
Ole André Vadla Ravnås
7b7f987a36 build: Add missing host system checks for Android 2021-01-06 01:06:28 +01:00
Ole André Vadla Ravnås
0ab51f8d4e gwin32: Always use unicode APIs
Instead of the legacy ANSI ones. This also means GLib behaves correctly
when built with unicode preprocessor defines.
2021-01-05 21:42:59 +01:00
Ole André Vadla Ravnås
f1a1e84dda gthread: Port native mutex to Clang
And other toolchains that support stdatomic.
2021-01-05 20:57:04 +01:00
Ole André Vadla Ravnås
d45d9f738c gthread: Fix incorrect cast 2021-01-05 20:44:55 +01:00
Philip Withnall
ea6fe7194a gerror: Clarify reference to g_key_file_has_key() in documentation
It’s not actually deprecated, but it is hard to use. It was briefly
deprecated, but then the deprecation was reversed before a stable
release.

See https://bugzilla.gnome.org/show_bug.cgi?id=650345.

Reported on StackOverflow as
https://stackoverflow.com/q/65505393/2931197.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-01-04 16:44:12 +00:00
Philip Withnall
bf0430f10e gerror: Improve documentation formatting slightly
No functional changes.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-01-04 16:43:37 +00:00
Philip Withnall
1ae734dd6d Merge branch 'wip/jtojnar/gsrc-dstr-example' into 'master'
Modernize g_source_is_destroyed example

Closes #2279

See merge request GNOME/glib!1835
2021-01-04 16:11:14 +00:00
Jan Tojnar
720dfa8cd3 Modernize g_source_is_destroyed example
gtk_threads_{leave,enter} API is deprecated and a narrower critical section,
guarding just idle_id manipulation, is better anyway.

Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2279
2021-01-04 15:42:03 +00:00
Chun-wei Fan
a2454d731a gdatetime.c: Fix MSVC builds for lack of NAN items
Use a fallback for isnan() on Visual Studio 2012 or earlier, and define
NAN if it does not exist.
2021-01-04 15:38:27 +00:00
Timm Bäder
89f12e10b6 keyfile: Only allocate group_hash if needed
A keyfile with no groups (e.g. an empty one) does not need a hash table
for the groups.
2020-12-31 14:58:37 +01:00
Timm Bäder
3ee05ef3bd keyfile: Don't allocate parse_buffer if we don't need it
When loading a GKeyFile, the sequence is usually:

keyfile = g_key_file_new();
g_key_file_load_xxx(keyfile, ...)

g_key_file_new() calls g_key_file_init(), which allocates a parse_buffer
for parsing. g_key_file_load_xxx() will then g_key_file_clear() the
keyfile and call g_key_file_init() again.

Just don't allocate a parse_buffer unless we need it for parsing.
2020-12-31 14:58:37 +01:00
Timm Bäder
03ca87586f fileutils: Avoid calling set_file_error with NULL GError**
If no pointer to a GError* has been passed to public API, there's not
need to look at translations via gettext or format an error message that
g_set_error_literal will entirely ignore in the end.
2020-12-31 14:58:37 +01:00
Timm Bäder
037f1ce672 keyfile: Delay calling g_get_language_names() until it's needed
The g_get_languages() call is quite costly and often unneeded.
2020-12-30 12:39:14 +01:00
Krzesimir Nowak
b715e4c9d0 gerror: Simplify error construction
Factor out the GError creation to a common function. When adding a
support for extended error types, this will limit the number of places
where these errors are allocated.
2020-12-23 23:17:41 +01:00
Philip Withnall
fec38762b3 gdate: Use string length when validating UTF-8
Makes the validation a tiny bit faster.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-21 16:50:53 +00:00
Philip Withnall
15634d64bf gdate: Limit length of dates which can be parsed as valid
Realistically any date over 200 bytes long is not going to be valid, so
limit the input length so we can’t spend too long doing UTF-8 validation
or normalisation.

oss-fuzz#28718

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-18 11:38:31 +00:00
Sebastian Dröge
784f968895 Merge branch '2227-more-nullables' into 'master'
glib: Add more missing return value annotations

See merge request GNOME/glib!1801
2020-12-15 08:22:00 +00:00
Sebastian Dröge
4fb3b6aa37 Merge branch 'asyncqueue-test-timing' into 'master'
tests: Be more lenient with timing checks on asyncqueue pops

See merge request GNOME/glib!1808
2020-12-13 09:18:21 +00:00
Philip Withnall
c58f308aed tests: Be more lenient with timing checks on asyncqueue pops
On heavily loaded CI machines it seems to be taking about 1.3s between
one `g_get_monotonic_time()` call and the next. Allow that.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-12 18:41:50 +00:00
Philip Withnall
ff56386788 tests: Add some rounding tolerance in timeout test
Occasionally this test fails in CI with the message:
```
assertion failed: (current_time / 1000000 - last_time / 1000000 == 1)
```

The way this calculation is done at the moment, a difference of 1001ms
between `current_time` and `last_time` can result in failure, if the
times are close to a multiple to 1000ms.

Change it to only truncate the result after doing the subtraction, and
add a 500ms tolerance to account for scheduling delays in the test. (For
example, the `test_func()` could be called, then descheduled before it
gets to call `g_get_monotonic_time()`.

Additionally, change the test to use `g_assert_cmpint()` so that future
failures provide more useful debug information.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-12 18:41:08 +00:00
Philip Withnall
0755ff97be gchecksum: Drop preconditions for checksum_type being valid
Instead, return `NULL` if the checksum type is unsupported. This may
come in useful if we have to withdraw support for a particular checksum
type in future, due to it being broken.

These semantics were already in place for the return value of
`g_checksum_new()` — see commit 877cc60f and bug
comment https://bugzilla.gnome.org/show_bug.cgi?id=501853#c6.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-12 18:30:22 +00:00
Philip Withnall
3fef049472 gchecksum: Add missing (transfer) and (nullable) return annotations
This commit only looks at the `Returns:` lines in the documentation, and
has examined all of them in the file. Function arguments have not been
checked.

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

Helps: #2227
2020-12-12 18:30:22 +00:00
Philip Withnall
da83d711d6 gbookmarkfile: Add missing (transfer) and (nullable) return annotations
This commit only looks at the `Returns:` lines in the documentation, and
has examined all of them in the file. Function arguments have not been
checked.

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

Helps: #2227
2020-12-12 18:30:22 +00:00
Philip Withnall
7c3891afe9 gasyncqueue: Add missing (transfer) and (nullable) return annotations
This commit only looks at the `Returns:` lines in the documentation, and
has examined all of them in the file. Function arguments have not been
checked.

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

Helps: #2227
2020-12-12 18:30:22 +00:00
Philip Withnall
f53b3f3a16 garray: Add missing (transfer) and (nullable) return annotations
This commit only looks at the `Returns:` lines in the documentation, and
has examined all of them in the file. Function arguments have not been
checked.

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

Helps: #2227
2020-12-12 18:30:22 +00:00
Philip Withnall
f7dbc6010b tests: Add more tests for GDateTime ISO 8601 seconds parsing
This should add a few more lines/branches to the test coverage.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-11 16:03:11 +00:00
Philip Withnall
50a3d0bf9d gdatetime: Use isnan() instead of !isfinite()
Both are provided by libm, but `isnan()` is provided as a macro, whereas
`isfinite()` is an actual function, and hence libm has to be available
at runtime. That didn’t trivially work on FreeBSD, resulting in this
refactor.

`isfinite(x)` is equivalent to `!isnan(x) && !isinfinite(x)`. The case
of `x` being (negative or positive) infinity is already handled by the
range checks on the next line, so it’s safe to switch to `isnan()` here.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-11 15:39:47 +00:00
Philip Withnall
5d7f4b8f04 gdatetime: Remove floating point from seconds parsing code
Rather than parsing the seconds in an ISO 8601 date/time using a pair of
floating point numbers (numerator and denominator), use two integers
instead. This avoids issues around floating point precision, and also
makes it easier to check for potential overflow from overlong inputs.

This last point means that the `isfinite()` check can be removed, as it
was covering the case where a NAN was generated, which isn’t now
possible using integer arithmetic.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-11 15:36:56 +00:00
Phaedrus Leeds
7ef936f4e3 gfileutils: Fix typo in docs 2020-12-10 21:06:00 -08:00
Sebastian Dröge
68e8fc85b4 Merge branch 'ossfuzz-28473-date-time-iso8601' into 'master'
gdatetime: Disallow NAN as a number of seconds in a GDateTime

See merge request GNOME/glib!1791
2020-12-09 15:12:44 +00:00
Timm Bäder
c2052a4ada array: Avoid sorting 0-sized arrays
Fixes #2264
2020-12-09 14:52:56 +00:00
Philip Withnall
c3805d74ba gdatetime: Disallow NAN as a number of seconds in a GDateTime
The fiendish thing about NAN is that it never compares TRUE against
anything, so the limit checks `seconds < 0.0 || seconds >= 60.0` were
never triggering.

oss-fuzz#28473

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-09 14:50:02 +00:00
Philip Withnall
b4c2e4d553 gdate: Validate input as UTF-8 before parsing
Dates have to be valid UTF-8.

oss-fuzz#28458

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-09 12:07:41 +00:00
Philip Withnall
d5778ec479 gvariant: Clarify operator precedence
This doesn’t change the behaviour of the code, but should squash some
compiler/static analysis warnings about ‘are you sure you got the
precedence right here?’.

Coverity CID: #1159470

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-08 12:17:00 +00:00
Philip Withnall
95c19181ae guri: Correctly set an error when parsing an invalid hostname
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-04 13:54:27 +00:00
Philip Withnall
1d461bc9f4 ghostutils: Abandon hostname conversion early if it’s too long
The `nameprep()` function in `ghostutils.c` is quite complex, and does a
lot of allocations. This means it can take a long time on long hostnames
(on the order of 10KB long). Hostnames should never be that long,
though, so impose some loose length limits.

oss-fuzz#27371

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-04 13:54:27 +00:00
Philip Withnall
3531239f0e ghostutils: Add missing GIR annotations
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2020-12-04 13:16:23 +00:00