Possible SEGV (null pointer deref) in list_resources_cb()
There seems to be a possible NULL pointer dereference in list_resources_cb()
:
static gboolean list_resources_cb (...)
{
...
resource = resource_from_section (shdr, d->fd);
list_resource (resource, "/",
d->section ? "" : section,
d->path,
d->details);
...
}
The problem is that resource_from_section()
(or g_resource_new_from_data()
) can return NULL on an error condition (e.g., corrupt ELF file). However, list_resource()
does not expect the resource to be NULL, and will eventually crash.
Example stack trace:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 g_resource_enumerate_children (resource=resource@entry=0x0,
path=path@entry=0x55c4d26c5077 "/",
lookup_flags=lookup_flags@entry=G_RESOURCE_LOOKUP_FLAGS_NONE,
error=error@entry=0x7ffcead737e8) at ../../../gio/gresource.c:978
978 children = gvdb_table_list (resource->table, path_with_slash);
#0 g_resource_enumerate_children (resource=resource@entry=0x0, path=path@entry=0x55c4d26c5077 "/", lookup_flags=lookup_flags@entry=G_RESOURCE_LOOKUP_FLAGS_NONE, error=error@entry=0x7ffcead737e8) at ../../../gio/gresource.c:978
#1 0x000055c4d26c3a26 in list_resource (resource=resource@entry=0x0, path=path@entry=0x55c4d26c5077 "/", section=section@entry=0x55c4d3982214 "gnome_calculator", prefix=0x55c4d26c510f "", details=0) at ../../../gio/gresource-tool.c:88
#2 0x000055c4d26c3f7b in list_resources_cb (shdr=<optimized out>, section=<optimized out>, data=0x7ffcead73920)
at ../../../gio/gresource-tool.c:280
#3 0x000055c4d26c3dc2 in elf_foreach_resource_section (elf=elf@entry=0x55c4d397fde0, callback=callback@entry=0x55c4d26c3f10 <list_resources_cb>, data=data@entry=0x7ffcead73920)
at ../../../gio/gresource-tool.c:216
#4 0x000055c4d26c4165 in elf_list_resources (details=0, path=0x55c4d26c510f "", section=0x0, fd=3, elf=0x55c4d397fde0)
at ../../../gio/gresource-tool.c:307
#5 cmd_list (file=<optimized out>, section=0x0, path=<optimized out>, details=0)
at ../../../gio/gresource-tool.c:419
#6 0x000055c4d26c379a in main (argc=<optimized out>, argv=0x7ffcead73ac8)
at ../../../gio/gresource-tool.c:661