So Ted asked me to look at this, in the hopes another set of eyeballs would help.
I'm leery that the linked branch will do much. The type of the properties is already checked in get_properties_callback(). And the g_variant_iter_loop() format_string argument in the stack trace is "v}" which is clearly wrong. Looks like memory got corrupted somewhere upstack rather than unexpected variants in the properties list.
There aren't that many near opportunities for memory corruption. The 'data' argument to the function seems to be correctly ref'd before the callback is setup so it seems to be valid memory for the dbusmenu_menuitem_properties_list() call. That would leave get_properties_callback()...
Seems suspicious to unref the child there, since the docs say the iter is only valid as long as child is.
Additionally, though this wouldn't cause the crash, on line 1381, the "have_error == FALSE" check should be moved up to the surrounding "properties != NULL" check; otherwise you'll leak the first key/value pair if have_error is TRUE.
So Ted asked me to look at this, in the hopes another set of eyeballs would help.
I'm leery that the linked branch will do much. The type of the properties is already checked in get_properties_ callback( ). And the g_variant_ iter_loop( ) format_string argument in the stack trace is "v}" which is clearly wrong. Looks like memory got corrupted somewhere upstack rather than unexpected variants in the properties list.
There aren't that many near opportunities for memory corruption. The 'data' argument to the function seems to be correctly ref'd before the callback is setup so it seems to be valid memory for the dbusmenu_ menuitem_ properties_ list() call. That would leave get_properties_ callback( )...
What about line 604?
601 GVariant * child = g_variant_ get_child_ value(params, 0); iter_init( &iter, child); unref(child) ; iter_next_ value(& iter)) != NULL) {
602 GVariantIter iter;
603 g_variant_
604 g_variant_
605 while ((child = g_variant_
Seems suspicious to unref the child there, since the docs say the iter is only valid as long as child is.
Additionally, though this wouldn't cause the crash, on line 1381, the "have_error == FALSE" check should be moved up to the surrounding "properties != NULL" check; otherwise you'll leak the first key/value pair if have_error is TRUE.