gnome-boxes can't handle incomplete libosinfo installations
When running gnome-boxes from jhbuild without a complete osinfo-db (say, with just libosinfo installed in the prefix), a crash in libosinfo can happen:
(gnome-boxes:26660): Boxes-WARNING **: 14:05:03.233: wizard-source.vala:366: Failed to find OS with ID 'http://redhat.com/rhel/7.4': Unknown OS ID 'http://redhat.com/rhel/7.4'
[Thread 0x7fffd51ff700 (LWP 26678) exited]
Thread 1 "gnome-boxes" received signal SIGSEGV, Segmentation fault.
0x00007ffff71a153f in osinfo_list_get_nth (list=0x7fff6962d1b0, idx=0) at ../osinfo/osinfo_list.c:196
196 return g_ptr_array_index(list->priv->array, idx);
(gdb) bt
#0 0x00007ffff71a153f in osinfo_list_get_nth (list=0x7fff6962d1b0, idx=0) at ../osinfo/osinfo_list.c:196
#1 0x000055555564162f in boxes_get_recommended_downloads_co (_data_=0x55555610d4b0) at ../src/util-app.vala:174
#2 0x0000555555640b5d in boxes_get_recommended_downloads_ready (source_object=0x555555b46270, _res_=0x5555562970d0, _user_data_=0x55555610d4b0)
at ../src/util-app.vala:173
#3 0x00007ffff72a8369 in g_task_return_now (task=0x5555562970d0) at ../gio/gtask.c:1212
#4 0x00007ffff72a8e8d in g_task_return (task=0x5555562970d0, type=<optimized out>) at ../gio/gtask.c:1281
#5 0x0000555555606fb5 in boxes_os_database_get_os_by_id_co (_data_=0x55555628e330) at ../src/os-database.vala:101
#6 0x0000555555606c15 in boxes_os_database_get_os_by_id_ready (source_object=0x555555b46270, _res_=0x555556297190, _user_data_=0x55555628e330)
at ../src/os-database.vala:94
#7 0x00007ffff72a8369 in g_task_return_now (task=0x555556297190) at ../gio/gtask.c:1212
#8 0x00007ffff72a8e8d in g_task_return (task=0x555556297190, type=<optimized out>) at ../gio/gtask.c:1281
#9 0x0000555555609dc6 in boxes_os_database_ensure_db_loaded_co (_data_=0x555556296b60) at ../src/os-database.vala:273
#10 0x0000555555609adb in ___lambda19_ (_data71_=0x555556294480) at ../src/os-database.vala:266
#11 0x0000555555609b11 in ____lambda19__boxes_os_database_db_loaded (_sender=0x555555b46270, self=0x555556294480) at ../src/os-database.vala:265
#12 0x00007ffff7e8fdd2 in g_closure_invoke (closure=0x55555629c030, return_value=0x0, n_param_values=1, param_values=0x7fffffffd2d0,
invocation_hint=0x7fffffffd270) at ../gobject/gclosure.c:810
#13 0x00007ffff7ea2dac in signal_emit_unlocked_R (node=node@entry=0x555555da0d40, detail=detail@entry=0, instance=instance@entry=0x555555b46270,
emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd2d0) at ../gobject/gsignal.c:3645
#14 0x00007ffff7eabb3e in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>,
var_args=var_args@entry=0x7fffffffd458) at ../gobject/gsignal.c:3401
#15 0x00007ffff7eac1a2 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3457
#16 0x0000555555605e81 in boxes_os_database_load_co (_data_=0x555555aba320) at ../src/os-database.vala:70
#17 0x0000555555605817 in boxes_os_database_load_ready (source_object=0x0, _res_=0x5555560e2b40, _user_data_=0x555555aba320) at ../src/os-database.vala:59
#18 0x00007ffff72a8369 in g_task_return_now (task=0x5555560e2b40) at ../gio/gtask.c:1212
#19 0x00007ffff72a8e8d in g_task_return (task=0x5555560e2b40, type=<optimized out>) at ../gio/gtask.c:1281
#20 0x000055555568dd4b in boxes_async_launcher_launch_co (_data_=0x55555579fa10) at ../src/async-launcher.vala:21
#21 0x000055555568d73a in _boxes_async_launcher_launch_co_gsource_func (self=0x55555579fa10) at async-launcher.c:329
#22 0x00007ffff7da7a0e in g_main_dispatch (context=0x55555578a440) at ../glib/gmain.c:3185
#23 g_main_context_dispatch (context=context@entry=0x55555578a440) at ../glib/gmain.c:3850
#24 0x00007ffff7da7d90 in g_main_context_iterate (context=context@entry=0x55555578a440, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
at ../glib/gmain.c:3923
#25 0x00007ffff7da7e1f in g_main_context_iteration (context=context@entry=0x55555578a440, may_block=may_block@entry=1) at ../glib/gmain.c:3984
#26 0x00007ffff72d3fdd in g_application_run (application=0x555555787180, argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2559
#27 0x00005555555fb616 in _vala_main (args=0x7fffffffd908, args_length1=1) at ../src/main.vala:84
#28 0x00005555555fb663 in main (argc=1, argv=0x7fffffffd908) at ../src/main.vala:68
The above crash should be fixed in https://gitlab.com/libosinfo/libosinfo/merge_requests/23 -- However, that exposes another bunch of crashes in gnome-boxes itself:
(gnome-boxes:27474): Boxes-WARNING **: 14:08:59.325: util-app.vala:178: Failed to find OS with id: 'http://endlessos.com/eos/3.6': Unknown OS ID 'http://endlessos.com/eos/3.6'
Thread 1 "gnome-boxes" received signal SIGSEGV, Segmentation fault.
g_list_store_append (store=0x55555628f280, item=0x0) at ../gio/gliststore.c:368
368 g_return_if_fail (g_type_is_a (G_OBJECT_TYPE (item), store->item_type));
(gdb) bt
#0 g_list_store_append (store=0x55555628f280, item=0x0) at ../gio/gliststore.c:368
#1 0x000055555566309f in boxes_wizard_downloads_page_populate_recommended_list_co (_data_=0x7fff68011ea0) at ../src/wizard-downloads-page.vala:72
#2 0x0000555555662f3c in boxes_wizard_downloads_page_populate_recommended_list_ready (source_object=0x0, _res_=0x555556299000, _user_data_=0x7fff68011ea0)
at ../src/wizard-downloads-page.vala:71
#3 0x00007ffff72a8369 in g_task_return_now (task=0x555556299000) at ../gio/gtask.c:1212
#4 0x00007ffff72a8e8d in g_task_return (task=0x555556299000, type=<optimized out>) at ../gio/gtask.c:1281
#5 0x0000555555641ab9 in boxes_get_recommended_downloads_co (_data_=0x5555560e3590) at ../src/util-app.vala:182
#6 0x0000555555640b5d in boxes_get_recommended_downloads_ready (source_object=0x555555bbb270, _res_=0x555556299540, _user_data_=0x5555560e3590)
at ../src/util-app.vala:173
#7 0x00007ffff72a8369 in g_task_return_now (task=0x555556299540) at ../gio/gtask.c:1212
#8 0x00007ffff72a8e8d in g_task_return (task=0x555556299540, type=<optimized out>) at ../gio/gtask.c:1281
#9 0x0000555555606e9b in boxes_os_database_get_os_by_id_co (_data_=0x555556369e80) at ../src/os-database.vala:99
#10 0x0000555555606c15 in boxes_os_database_get_os_by_id_ready (source_object=0x555555bbb270, _res_=0x555556299480, _user_data_=0x555556369e80)
at ../src/os-database.vala:94
#11 0x00007ffff72a8369 in g_task_return_now (task=0x555556299480) at ../gio/gtask.c:1212
#12 0x00007ffff72a83a9 in complete_in_idle_cb (task=0x555556299480) at ../gio/gtask.c:1226
#13 0x00007ffff7da7a0e in g_main_dispatch (context=0x55555578a440) at ../glib/gmain.c:3185
#14 g_main_context_dispatch (context=context@entry=0x55555578a440) at ../glib/gmain.c:3850
#15 0x00007ffff7da7d90 in g_main_context_iterate (context=context@entry=0x55555578a440, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
at ../glib/gmain.c:3923
#16 0x00007ffff7da7e1f in g_main_context_iteration (context=context@entry=0x55555578a440, may_block=may_block@entry=1) at ../glib/gmain.c:3984
#17 0x00007ffff72d3fdd in g_application_run (application=0x555555787180, argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2559
#18 0x00005555555fb616 in _vala_main (args=0x7fffffffd908, args_length1=1) at ../src/main.vala:84
#19 0x00005555555fb663 in main (argc=1, argv=0x7fffffffd908) at ../src/main.vala:68
The attached MR for gnome-boxes fixes the (incorrectly) assumed validity of media
in a few locations that depend on libosinfo.
This is the relevant libosinfo MR: https://gitlab.com/libosinfo/libosinfo/merge_requests/23