Commit Graph

536 Commits

Author SHA1 Message Date
Philip Withnall
a25e15695b Merge branch 'wsign-conversion3' into 'main'
Enable -Wsign-conversion for girepository, gthread, gmodule

See merge request GNOME/glib!4594
2025-04-22 21:47:03 +00:00
Dan Yeaw
5f12b1b400 Windows: fix wrong typelib path 2025-04-12 15:45:51 +00:00
Philip Withnall
21d8e246e7 girepository: More minor -Wsign-conversion fixes from CI
These didn’t occur on my local machine, interestingly.

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

Helps: #3405
2025-04-12 16:24:32 +01:00
Philip Withnall
3de99090d0 girepository: Enable -Wsign-conversion for girepository subdirectory
As with previous commits, we’re enabling `-Wsign-conversion` piecemeal
for all of glib.git.

The previous few commits have fixed all the `-Wsign-conversion` warnings
in libgirepository, so let’s enable the warning by default for that
directory to prevent regressions.

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

Helps: #3405
2025-04-11 23:56:49 +01:00
Philip Withnall
7c06269eef girparser: Limit the size of GIR files which can be parsed
Due to passing around file lengths variously as `gsize` or `gssize`,
we can’t reliably handle files with length greater than `G_MAXSSIZE`, as
some of the APIs in use need `-1` to indicate that their input is nul
terminated.

Add some checks for this, and gracefully return an error if an input
file is too big, rather than just exploding.

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

Helps: #3405
2025-04-11 23:56:44 +01:00
Philip Withnall
4a29abe9f7 girparser: Stop setting blob length to -1 when no length is set
When parsing a GIR or building a typelib, stop setting the array length
field to `-1` as a default. That field is unsigned, so setting it to
`-1` is actually equivalent to setting it to `G_MAXUINT`. I can’t find
anywhere which treats `G_MAXUINT` or `-1` as a magic value there, so
it’s probably better off left unset.

Given the lack of documentation for the typelib code, though, there is a
fair chance I’m making a mistake and this is actually an integral part
of the format. Let’s see what breaks.

This fixes a `-Wsign-conversion` warning, at least.

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

Helps: #3405
2025-04-11 23:56:39 +01:00
Philip Withnall
debb6a9cc0 tests: Add a basic test for GIIrParser type parsing
This follows up from the previous two commits to add a unit test.

It doesn’t attempt to cover the multitude of other possible type parsing
conditions; at the moment it’s just a regression test for the previous
two commits, and somewhere to hang new tests on in future.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-04-11 23:56:35 +01:00
Philip Withnall
cff7783a32 girparser: Fix error handling for type parsing
Reworking the code to add proper `GError` handling for type parsing,
rather than the existing `g_critical()`, turned out to actually be
fairly straightforward.

So now `gi_ir_parser_parse_string()` returns
`G_MARKUP_ERROR_INVALID_CONTENT` on unparseable types, just like it does
with various other bits of invalid GIR.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-04-11 23:56:30 +01:00
Philip Withnall
e6d34fa5a8 girparser: Fix a potential buffer overflow with g_strndup()
If parsing a generic type which has no closing `>`, there was no check
that the `strchr()` call succeeded, which could have resulted in a
negative length being passed to `g_strndup()`, which would result in a
long positive length after implicit type casting.

Fix that by bringing an old error handling path back into use. This
results in a `g_critical()` in the calling function, which is good
enough for now. Potentially all this code could be reworked to use
`GError`, but that’s a much bigger project (a lot more of the
`girparser.c` code would need to change).

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

Helps: #3405
2025-04-11 23:56:26 +01:00
Philip Withnall
8ab78a66a4 girepository: Fix -Wsign-conversion warnings with string arithmetic
There are a few `g_strndup()` calls which use a length calculated from
the return value of `strchr()` minus the original string. That’s fine,
as long as `strchr()` doesn’t return `NULL`. Add some asserts to ensure
that.

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

Helps: #3405
2025-04-11 23:56:21 +01:00
Philip Withnall
f44511bc54 girepository: Fix straightforward -Wsign-conversion warnings
Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3405
2025-04-11 23:56:17 +01:00
Philip Withnall
d854836aff girparser: Fix a strict-aliasing warning with g_clear_pointer()
Casting the type for a `g_clear_pointer()` call breaks strict aliasing
rules.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-04-03 15:38:45 +01: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)
0a47b69b46 girepository/parser: Clarify ownership of nodetype nodes
We may had free'd a list of items without freeing the items in there.
So now, properly steal the data instead and free everything.
2025-04-03 13:57:18 +02:00
Marco Trevisan (Treviño)
98de5367d3 girepository/compiler: Cleanup the parser error on failure 2025-04-03 13:57:18 +02:00
Marco Trevisan (Treviño)
cc070e1a7d girepository/compiler: Cleanup the parser on write failures 2025-04-03 13:57:18 +02:00
Philip Withnall
416bab52eb tests: Fix a memory leak if a callable-info test is skipped
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-04-03 13:57:18 +02:00
Philip Withnall
aee0664e6f girparser: Ignore new doc:format element in GIR files
As of gobject-introspection 1.83.2, a new `<doc:format name="…"/>`
element is supported (as a child of `<repository>`) in GIR files.

For the moment, this information isn’t needed in libgirepository — but
the GIR parser does have to know about the element in order to not throw
an error claiming it’s invalid.

This is a slightly tweaked version of the code added to
gobject-introspection.git in commit
9544cd6c962fab2c3203898779948309833e2439 by Corentin Noël
<corentin.noel@collabora.com>, reformatted slightly to fit in with
GLib’s style guidelines.

This is backwards compatible and does not require a new
gobject-introspection version.

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

Fixes: #3634
2025-03-10 15:21:15 +00:00
Simon McVittie
2c358ec7f8 build: Factor out a variable for the GIR XML directory suffix
Signed-off-by: Simon McVittie <smcv@collabora.com>
2025-02-21 20:12:48 +00:00
Simon McVittie
9f18bb6258 tests: Search the appropriate directories for our GIR XML inputs
During "as-installed" testing, we should search the GIR_DIR for GIR XML,
instead of hard-coding that it is `${prefix}/share/gir-1.0`. This is
not the case on at least Debian, in order to make it possible to
install more than one architecture's flavour of `GLib-2.0.gir`,
which contains some architecture-specific `#define`s.

Also search GOBJECT_INTROSPECTION_DATADIR/GIR_SUFFIX (in practice
something like `/usr/share/gir-1.0` in all cases) to accommodate
distributions like Debian that move the architecture-independent
majority of GIR XML into /usr/share to avoid duplication, leaving
only the architecture-specific minority of files like `GLib-2.0.gir`
in the GIR_DIR.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2025-02-21 16:40:47 +00:00
Simon McVittie
135850a534 tests: Reformat gi-compile-repository.py according to black(1)
Signed-off-by: Simon McVittie <smcv@collabora.com>
2025-02-21 16:05:43 +00:00
Marco Trevisan (Treviño)
044e77a384 girepository/tests: Add tests for basic inspector operations
Add some initial tests for the inspector
2025-02-12 17:37:25 +01:00
Marco Trevisan (Treviño)
6160747fe5 girepository/tests: Add tests for the compiler basic operations
Adding some initial test for the compiler behavior and its expected
output.

Also, when using sanitizers we want to be able to test the compiler memory
management.
2025-02-11 21:02:56 +01:00
Marco Trevisan (Treviño)
bf9ea337a2 girepository/tests: Add tests on compiler open/write failures 2025-02-11 21:02:56 +01:00
Philip Withnall
a127f9b7d2 tests: Fix a memory leak if a callable-info test is skipped
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-11 11:40:29 +00:00
Philip Chimento
7471ab20d1 girepository: Add test for static vfunc info
This is a test for the functionality in the previous commit. It depends
on g-ir-scanner being able to scan static vfuncs, and is otherwise
skipped.

The g-ir-scanner functionality is in
https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/361
2025-01-19 13:49:55 -08:00
Marco Trevisan (Treviño)
7ea9840cf4 girepository: Read static vfunc attribute exposing via callable is_method()
Read the static attribute for virtual functions, and make sure that
g_callable_info_is_method() returns false for such cases.
2025-01-19 13:49:55 -08:00
Philip Chimento
fe142e3b32 girepository: Add baseline tests for gi_callable_info_is_method()
This tests existing functionality.
2025-01-18 14:27:24 -08:00
Philip Chimento
3d71dcaa64 gicallableinfo: Fix inaccuracy in is_method docs
The docs say that gi_callable_info_is_method() on a GICallbackInfo
always returns TRUE. But the source code says it always returns FALSE.
2025-01-18 14:16:55 -08:00
Simon McVittie
feca93e51e girepository: Correct --c-include arguments for GIO Unix/Windows headers
The deprecated construct '@0@'.format(h) (where h is a file object)
expanded to the filename relative to the project root, which in this
particular case happens to be what we wanted:
`--c-include=gio/gunixmounts.h` resulted in a recommendation to
`#include <gio/gunixmounts.h>` and so on. Replacing it with
h.full_path() resulted in GIR XML and documentation that recommended
constructs like `#include </home/me/src/glib/gio/gunixmounts.h>`,
which is not what was intended (and caused new differences between
different architectures' Gio-2.0.gir on multiarch systems, which is
how I discovered this).

Hard-coding `gio/` and appending the basename of the header seems like
the simplest non-deprecated spelling that will do what we wanted.

Fixes: 51e3e7d9 "build: Bump Meson dependency to 1.4.0"
Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/3564
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-12-13 23:34:10 +00:00
Evan Welsh
bb0dd59a6b girepository: Expose gi-compile-repository in pkg-config
Expose the binary path to gi-compile-repository similar to how
glib-compile-resources is exposed so meson and other external
tools can locate it.
2024-12-10 17:58:41 +00:00
Barnabás Pőcze
7a528d0ff0 girepository: gi_object_info_find_signal(): Avoid repeated allocations
Previously `gi_object_info_find_signal()` used `gi_object_info_get_signal()`
to retrieve the *i*th signal and compare its name to the desired name.
However, `gi_object_info_get_signal()` returns an allocated object.
If the names were not matching, the allocated object was simply dropped,
and this resulted in a lot of unnecessary allocations compared to the
desired number of allocations, which is one.

To avoid much of the overhead pertaining to the creation of these allocated
`GISignalInfo` objects, introduce a new function that inspects the signal
blobs directly and returns an allocated `GISignalInfo` object just for the
matching signal. The function is largely a copy-and-paste of `gi_base_info_find_vfunc()`,
which does the same thing, only for virtual functions.

See https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/504
2024-11-23 19:25:17 +01:00
Emmanuele Bassi
20134e6942 gir: Ignore function-inline and method-inline elements
Static inlines are available in the GIR, but they do not translate to
ABI, so they cannot go in the typelib. We handle them just like function
macros.
2024-10-03 18:35:38 +02:00
Olivier Blin
190f9249cd girepository: Make _blob_is_registered_type static inline
This follows the usage in the glib codebase and recommendations at
main/docs/toolchain-requirements.md

It also fixes a build warning with ancient gcc 4.8:
../girepository/gitypelib-internal.h:202:1: warning:
no previous prototype for ‘_blob_is_registered_type’ [-Wmissing-prototypes]
2024-09-25 10:45:05 +02:00
Michael Catanzaro
12fcbcfa41 gibaseinfo: fully initialize GTypeInfo before registering it 2024-09-18 01:48:36 +01:00
Philip Withnall
7a7d8d548a Merge branch 'wfloat-conversion' into 'main'
build: Enable -Wfloat-conversion and fix warnings

See merge request GNOME/glib!4126
2024-09-17 17:57:11 +00:00
Benjamin Gilbert
51e3e7d9ae build: Bump Meson dependency to 1.4.0
Meson 1.5.1 is available in the fd.o SDK and in Debian testing, so the
glib Meson policy says we can update.  Update the minimum only as far as
1.4.0 because we don't yet have a need for 1.5.0.

This allows us to:

- Use file.full_path() to avoid deprecation warnings on str.format(file).
- Set c_std=gnu99,c99 to avoid deprecation warnings with gnu99 on MSVC.

Update all the CI builds to use the latest 1.4.x patch release, 1.4.2.

The FreeBSD runner cannot be updated via `gitlab-ci.yml`, so will be
broken for now.

Similarly, the macOS build will not work unless `-Dc_std=gnu99` is
specified at configure time, due to
https://github.com/mesonbuild/meson/issues/13639.
2024-09-12 19:15:05 +01:00
Philip Withnall
39671c196d girepository: Fix hole in GIFunctionInfoFlags
It’s unclear why there was a hole in this. Let’s keep things less
confusing by eliminating it.

Fixes commit 453dd4be9e.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-08-26 12:08:28 +01:00
Philip Withnall
0a60b57fd4 girepository: Fix API version ‘since’ numbers
Fixes commit 453dd4be9e.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-08-26 12:08:13 +01:00
Philip Withnall
10177cf3ea girepository: Coding style fixes
Fixes commit 453dd4be9e.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-08-26 12:07:49 +01:00
Evan Welsh
453dd4be9e girepository: Add APIs for sync, async, and finish function annotations 2024-08-26 12:07:25 +01:00
Chun-wei Fan
297d808c6b introspection: Correct GIO-Windows pkg-config name
It's gio-windows-2.0.pc, not gio-win32-2.0.pc.

Otherwise, we get warnings/errors where the package cannot be located
but since we are linking to the same GIO library file, this did not
manifest itself.
2024-07-17 16:28:34 +08:00
Philip Withnall
d0cba9e6ec girnode: Explicitly lose precision on parsed float values
When building a typelib, the values of constants need to be converted
from a string format (from the GIR) to a binary format. This is
currently done, for all numeric types, using `g_ascii_strto*()`
functions, but with minimal validation. String values which are not
representable as binary numbers are either silently truncated or
clamped.

`-Wfloat-conversion` has flagged that this happens for floats – a
double-precision return from `g_ascii_strtod()` is implicitly cast down
to a float.

While we should ideally have some better error handling so that
conversion to a typelib fails if a constant is not representable in the
typelib, this is a problem for *all* numeric types and not just `float`,
so add an explicit cast to ignore the error for now.

In practice there probably isn’t a problem for any numeric types here,
as there should be validation of the string value when the GIR is
generated anyway.

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

Helps: #3405
2024-06-28 14:27:23 +01:00
Philip Withnall
98854efa74 introspection: Add libgirepository as a dep to all generate_gir() calls
libgirepository is not needed by most of the modules, but it is needed
by the `g-ir-scanner` generated dumper program. If we don’t explicitly
include the local version of it here, Meson will implicitly link against
it anyway, and that might pull in a different version, or try to link
against a half-built local version as the build ordering dependency tree
won’t reflect this relationship.

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

Fixes: #3401
2024-06-26 12:48:32 +01:00
Philip Withnall
74c6c4c221 Merge branch 'fix-introspection-windows' into 'main'
Introspection: Fix running g-ir-scanner 1.80.x+ on Windows

See merge request GNOME/glib!3988
2024-06-13 20:12:33 +00:00
Philip Withnall
c2e7b2f3b0 girepository: Fix type of precondition return values
This fixes a compiler warning (`-Wnon-literal-null-conversion`) on
clang 13 on macOS.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-06-04 17:27:28 +01:00
Simon McVittie
a0ed94a11d Provide private G_SIGNEDNESS_OF macro in glib-private.h
Signed-off-by: Simon McVittie <smcv@debian.org>
2024-06-04 16:57:18 +01:00
Simon McVittie
7c41a6529b girparser: Use INTEGER_ALIAS to reduce repetition
As a special case, keep the historical behaviour of treating gchar
as being signed, both on platforms where it is genuinely signed (for
example x86 Linux) and where it is unsigned (for example ARM, s390x
and PowerPC Linux). Changing gchar to use INTEGER_ALIAS would have a
regression risk, so if we want to do that, it should be as a separate
change.

No functional change intended.

Signed-off-by: Simon McVittie <smcv@debian.org>
2024-06-04 16:57:18 +01:00
Philip Withnall
d02f5816bf Merge branch 'wip/pwithnall/gdump-tests' into 'main'
tests: Add basic tests for gdump.c in libgirepository

See merge request GNOME/glib!4102
2024-06-04 15:17:03 +00:00
Philip Withnall
5b26ef2e46 tests: Add basic tests for gdump.c in libgirepository
It’s currently completely untested. Let’s add a few basic tests so that
adding more tests in future is easier.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-06-04 15:52:05 +01:00