GKeyFileSettingsBackend created without filename construct property and unchecked assertion
(epiphany:6082): GLib-GIO-CRITICAL **: 17:04:59.181: g_file_new_for_path: assertion 'path != NULL' failed
Turns out to be:
#0 _g_log_abort (breakpoint=1) at ../../../../git/gnome/glib/glib/gmessages.c:557
#1 0x00007fc7e7c145c8 in g_logv (log_domain=0x7fc7e7ee2937 "GLib-GIO", log_level=G_LOG_LEVEL_CRITICAL, format=0x7fc7e7c74816 "%s: assertion '%s' failed", args=0x7ffd9c69baa8) at ../../../../git/gnome/glib/glib/gmessages.c:1371
#2 0x00007fc7e7c146b9 in g_log (log_domain=0x7fc7e7ee2937 "GLib-GIO", log_level=G_LOG_LEVEL_CRITICAL, format=0x7fc7e7c74816 "%s: assertion '%s' failed") at ../../../../git/gnome/glib/glib/gmessages.c:1413
#3 0x00007fc7e7c1656b in g_return_if_fail_warning (log_domain=0x7fc7e7ee2937 "GLib-GIO", pretty_function=0x7fc7e7ee3f10 <__FUNCTION__.31573> "g_file_new_for_path", expression=0x7fc7e7ee2de5 "path != NULL") at ../../../../git/gnome/glib/glib/gmessages.c:2767
#4 0x00007fc7e7dbc707 in g_file_new_for_path (path=0x0) at ../../../../git/gnome/glib/gio/gfile.c:6486
#5 0x00007fc7e7e6a72e in g_keyfile_settings_backend_set_property (object=0x55f3402fbb20, prop_id=1, value=0x7ffd9c69bc50, pspec=0x7fc7cc004de0) at ../../../../git/gnome/glib/gio/gkeyfilesettingsbackend.c:743
#6 0x00007fc7e7d09f38 in object_set_property (object=0x55f3402fbb20, pspec=0x7fc7cc004de0, value=0x7fc7cc004dc0, nqueue=0x55f34031f110) at ../../../../git/gnome/glib/gobject/gobject.c:1469
#7 0x00007fc7e7d0ab96 in g_object_new_internal (class=0x55f340313d90, params=0x0, n_params=0) at ../../../../git/gnome/glib/gobject/gobject.c:1861
#8 0x00007fc7e7d0b09e in g_object_new_with_properties (object_type=94503242418304, n_properties=0, names=0x0, values=0x0) at ../../../../git/gnome/glib/gobject/gobject.c:1995
#9 0x00007fc7e7d0a638 in g_object_new (object_type=94503242418304, first_property_name=0x0) at ../../../../git/gnome/glib/gobject/gobject.c:1667
#10 0x00007fc7e7dd9593 in try_implementation (extension_point=0x7fc7e7f0314a "gsettings-backend", extension=0x55f3402ec740, verify_func=0x7fc7e7e6ca10 <g_settings_backend_verify>) at ../../../../git/gnome/glib/gio/giomodule.c:869
#11 0x00007fc7e7dd97f3 in _g_io_module_get_default (extension_point=0x7fc7e7f0314a "gsettings-backend", envvar=0x7fc7e7f030c6 "GSETTINGS_BACKEND", verify_func=0x7fc7e7e6ca10 <g_settings_backend_verify>) at ../../../../git/gnome/glib/gio/giomodule.c:979
#12 0x00007fc7e7e6cab8 in g_settings_backend_get_default () at ../../../../git/gnome/glib/gio/gsettingsbackend.c:1006
#13 0x00007fc7e7e737b8 in g_settings_constructed (object=0x55f340304210) at ../../../../git/gnome/glib/gio/gsettings.c:683
#14 0x00007fc7e7d0abd2 in g_object_new_internal (class=0x55f34030e340, params=0x7ffd9c69c0c0, n_params=3) at ../../../../git/gnome/glib/gobject/gobject.c:1867
#15 0x00007fc7e7d0b92b in g_object_new_valist (object_type=94503242358464, first_property_name=0x7fc7e7f03cbc "settings-schema", var_args=0x7ffd9c69c250) at ../../../../git/gnome/glib/gobject/gobject.c:2152
#16 0x00007fc7e7d0a687 in g_object_new (object_type=94503242358464, first_property_name=0x7fc7e7f03cbc "settings-schema") at ../../../../git/gnome/glib/gobject/gobject.c:1670
#17 0x00007fc7e7e7421c in g_settings_new_full (schema=0x55f340304190, backend=0x0, path=0x0) at ../../../../git/gnome/glib/gio/gsettings.c:1140
#18 0x00007fc7e822dfa6 in init_settings (screen=0x55f3402fb810) at ../../../../git/gnome/gtk+-3/gdk/wayland/gdkscreen-wayland.c:774
#19 0x00007fc7e822f2f8 in _gdk_wayland_screen_new (display=0x55f3402f8040) at ../../../../git/gnome/gtk+-3/gdk/wayland/gdkscreen-wayland.c:1278
#20 0x00007fc7e8225f11 in _gdk_wayland_display_open (display_name=0x0) at ../../../../git/gnome/gtk+-3/gdk/wayland/gdkdisplay-wayland.c:610
#21 0x00007fc7e81e006b in gdk_display_manager_open_display (manager=0x55f3402f0000, name=0x0) at ../../../../git/gnome/gtk+-3/gdk/gdkdisplaymanager.c:475
#22 0x00007fc7e81de257 in gdk_display_open (display_name=0x0) at ../../../../git/gnome/gtk+-3/gdk/gdkdisplay.c:1979
#23 0x00007fc7e81d2d52 in gdk_display_open_default () at ../../../../git/gnome/gtk+-3/gdk/gdk.c:475
#24 0x00007fc7e854e735 in post_parse_hook (context=0x55f3402e9480, group=0x55f3402ea900, data=0x55f3402ea680, error=0x7ffd9c69c6a8) at ../../../../git/gnome/gtk+-3/gtk/gtkmain.c:802
#25 0x00007fc7e7c1caf9 in g_option_context_parse (context=0x55f3402e9480, argc=0x7ffd9c69c69c, argv=0x7ffd9c69c690, error=0x7ffd9c69c6a8) at ../../../../git/gnome/glib/glib/goption.c:2214
#26 0x000055f33ef97d3b in main (argc=1, argv=0x7ffd9c69c828) at ../../../../git/gnome/epiphany/src/ephy-main.c:268
The object is instantiated here:
#10 0x00007fc7e7dd9593 in try_implementation (extension_point=0x7fc7e7f0314a "gsettings-backend", extension=0x55f3402ec740, verify_func=0x7fc7e7e6ca10 <g_settings_backend_verify>) at ../../../../git/gnome/glib/gio/giomodule.c:869
864 g_clear_error (&error);
865 return NULL;
866 }
867 else
868 {
869 impl = g_object_new (type, NULL);
870 if (!verify_func || verify_func (impl))
871 return impl;
872
873 g_object_unref (impl);
With no properties being set, however PROP_FILENAME is a construct property, and its default value when installed is NULL
. When this default value is set during construction, it's unchecked, even g_file_new_for_path() doesn't take NULL
:
(gdb) f 5
#5 0x00007fc7e7e6a72e in g_keyfile_settings_backend_set_property (object=0x55f3402fbb20, prop_id=1, value=0x7ffd9c69bc50, pspec=0x7fc7cc004de0) at ../../../../git/gnome/glib/gio/gkeyfilesettingsbackend.c:743
743 kfsb->file = g_file_new_for_path (g_value_get_string (value));
(gdb) list
738 switch ((GKeyfileSettingsBackendProperty)prop_id)
739 {
740 case PROP_FILENAME:
741 /* Construct only. */
742 g_assert (kfsb->file == NULL);
743 kfsb->file = g_file_new_for_path (g_value_get_string (value));
744 break;
745
746 case PROP_ROOT_PATH:
747 /* Construct only. */
Furthermore, it's expected that it can be NULL
, as the constructed()
method sets its actual default value later.
if (kfsb->file == NULL)
{
char *filename = g_build_filename (g_get_user_config_dir (),
"glib-2.0", "settings", "keyfile",
NULL);
kfsb->file = g_file_new_for_path (filename);
g_free (filename);
}