GNOME Bugzilla – Bug 654472
Crash on async error return over GDBus
Last modified: 2013-09-14 16:54:13 UTC
In the contacts pain, select New->Contact, add first/last names and an email, and set the destination addressbook to a MAPI folder. The Create Contact window then proceeds to hang and not accept input. The following is output by e-addressbook-factory: (e-addressbook-factory:5662): GLib-CRITICAL **: g_variant_new_strv: assertion `length == 0 || strv != NULL' failed Segmentation fault Which in turn seems to be an unhandled error earlier on. The error starts in build_restriction_emails_contains (./src/addressbook/e-book-backend-mapi-contacts.c) which seems to make an assumption that the email field passed in the sexp will be a fully qualified one. The email entered was indeed fully qualified, but in this sexp it seems to be passed as just "beginswith firstpart" (i.e. no '@domain.tld'). So this guy returns false, and the error seems to be handled locally but is not properly dealt with later on leading to the segfault. So I think the follownig needs to happen: * Determine whether it's valid that the contact creation should result in an email query that doesn't contain the fully qualified email * Handle the failure in build_restriction_emails_contains, or alternatively have it not fail (is it necessary to fail? and if so is it still relevant with the 0.11 restrictions support?) * (Ideally, perhaps out of scope) evo should not hang when the addressbook factory goes away.
This also affects the "automatically add contacts to Contacts List" feature
Crash is critical.
Thanks for a bug report. The crash issue resides in eds, because ema reported an error, but the gdbus template routines for async function I wrote didn't operate properly, thus it crashed. Below is the backtrace for the crash. (gdb) bt
+ Trace 227910
Created attachment 192751 [details] [review] eds patch for evolution-data-server; Use fake values when returning an error from async operation. I do a change in ema too, to not return the Other Error when it fails to convert query into restrictions. Once when the proper query->restriction convert routine will be done it might be returned back.
Created commit f6ea071 in eds master (3.1.5+) Created commit 3771ae7 in ema master (3.1.5+)