Re: Evolution 2 plugin crashing in syncobj_delete()
Jonas Birmé <[email protected]> Sun, 28 Nov 2004 22:08:50 +0100
| Newsgroups | gmane.comp.gnome.apps.multisync.devel |
|---|---|
| Message-ID | <[email protected]> |
sön 2004-11-28 klockan 21:16 +0100 skrev Fabian Sturm: > Hi! > [snip] > > The call to evo2_calendar_modify is similar and I suspect that deleting > > a calendar entry in the phone will also cause multisync to crash. I have > > not tested this yet. > > I guess the problem is also when an address book entry is deleted. > Multisync crashed in this case on my computer. I never debugged it and > fixed it by not allowing any changes to propagate from the phone to > evolution. It didn't work anyways because it created broken entries for > all the names containing special characters. > Yes, the problem also occur when removing a calendar entry. I have a quick fix attached in this mail. It can be applied with: In the top dir of multisync $ patch -p0 < evolution_sync.c.patch You could test with --dry-run first if you'd like. As I said, it is just a quick fix (by passing a pointer to uidretlen), but I guess it should be asserted in the called function which is not added by this patch. > e.g. Müller was created correctly on the phone but on a second > synchronization I got a M entry in evolution (stopping at the first > umlaut). /Jonas -- Jonas Birmé ([email protected]) Jabber: [email protected] http://home.birme.se/~birme/ IRC: sujarwo@GIMPNET | +-----< Abandon the search for Truth; settle for a good fantasy >--
evolution_sync.c.patch
(text/x-patch, 1.3 KB)
--- plugins/evolution2_sync/src/evolution_sync.c 2004-10-27 22:14:04.000000000 +0200
+++ ../multisync-birme/plugins/evolution2_sync/src/evolution_sync.c 2004-11-28 16:20:30.000000000 +0100
@@ -317,25 +317,26 @@
void syncobj_delete(evo_environment *env, char *uid, sync_object_type objtype, int softdelete)
{
+ int uidretlen;
evo_debug(env, 2, "start: delete");
switch (objtype) {
case SYNC_OBJECT_TYPE_PHONEBOOK:
- if (!evo2_addrbook_modify(env, NULL, uid, NULL, NULL)) {
+ if (!evo2_addrbook_modify(env, NULL, uid, NULL, &uidretlen)) {
sync_set_pair_status(env->handle, "Unable to delete addressbook entry");
sync_set_requestfailed(env->handle);
return;
}
break;
case SYNC_OBJECT_TYPE_CALENDAR:
- if (!evo2_calendar_modify(env, NULL, uid, NULL, NULL)) {
+ if (!evo2_calendar_modify(env, NULL, uid, NULL, &uidretlen)) {
sync_set_pair_status(env->handle, "Unable to delete calendar entry");
sync_set_requestfailed(env->handle);
return;
}
break;
case SYNC_OBJECT_TYPE_TODO:
- if (!evo2_tasks_modify(env, NULL, uid, NULL, NULL)) {
+ if (!evo2_tasks_modify(env, NULL, uid, NULL, &uidretlen)) {
sync_set_pair_status(env->handle, "Unable to delete task");
sync_set_requestfailed(env->handle);
return;