GNOME Bugzilla – Bug 546934
contact change tracking is broken (required by SyncEvolution)
Last modified: 2008-08-16 07:54:41 UTC
Please describe the problem: e_book_backend_exchange_get_changes() (and therefore e_book_get_changes() with an Exchange address book) has three different problems: * The list of collected changes in ctx->changes is never returned to the caller. Instead the list is leaked when freeing the context. * For deleted items, an empty vcard with the UID set should be returned. Instead find_deleted_ids() stores the UID directly. * find_deleted_ids() is a callback for g_hash_table_foreach() and modifies the hash that is iterated over. That's a big no-no! The effect is that the iteration is stopped prematurely, leading to incorrect change tracking. g_hash_table_foreach_remove() and its XML wrapper function have to be used instead. Steps to reproduce: Run the SyncEvolution test suite against Exchange address books. Actual results: No resp. (after fixing the initial problem) incorrect changes are returned. Expected results: Does this happen every time? Yes. Other information: I'll append a patch against 2.22.3. The code in question hasn't changed for quite a while, so the patch should apply cleanly to a variety of Evolution releases.
Created attachment 116141 [details] [review] fixes for Exchange contact change tracking This is the patch against 2.22.3. Please review and let me know where I should apply it.
Patrick, seems fine to me. Commit to trunk.