Bug 157074 - Segfault trying to sync calendar with an multi-day all-day event
Summary: Segfault trying to sync calendar with an multi-day all-day event
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 4
Classification: Red Hat
Component: evolution
Version: 4.0
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
: ---
Assignee: Dave Malcolm
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks: FC3Update 168429
TreeView+ depends on / blocked
 
Reported: 2005-05-06 16:37 UTC by Bastien Nocera
Modified: 2007-11-30 22:07 UTC (History)
0 users

Fixed In Version: RHBA-2006-0002
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2006-03-07 18:31:34 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)
evo-conduits-multi-day-crash.patch (692 bytes, patch)
2005-05-10 21:53 UTC, Bastien Nocera
no flags Details | Diff


Links
System ID Private Priority Status Summary Last Updated
GNOME Bugzilla 303702 0 None None None Never
Red Hat Product Errata RHBA-2006:0002 0 qe-ready SHIPPED_LIVE evolution bug fix update 2006-03-06 05:00:00 UTC

Description Bastien Nocera 2005-05-06 16:37:42 UTC
1. Create a new event in evolution
2. Select "all day event"
3. Make the end date a date at least a day older than the start date
4. Make sure that "Split multi-day events" is enabled in the ECalendar conduit
4. Launch a sync

(gpilotd:26204): libecal-CRITICAL **: file e-cal-component.c: line 1100
(e_cal_component_get_icalcomponent): assertion `priv->need_sequence_inc ==
FALSE' failed
Segmentation fault

An all day event that stays within a day doesn't crash.
With "Split multi-day events" disabled, the event(s) aren't synced at all.

Comment 1 Bastien Nocera 2005-05-09 10:29:56 UTC
The snippet of code causing the crash in the conduit is probably in
process_multi_day():
                dt_end.value = &end_value;
                e_cal_component_set_dtend (clone, &dt_end);

                /* FIXME Error handling */                 e_cal_create_object
(ctxt->client, e_cal_component_get_icalcomponent (clone), NULL, NULL);

e_cal_component_set_dtend sets priv->need_sequence_inc = TRUE;
but e_cal_component_get_icalcomponent has the assert: g_return_val_if_fail
(priv->need_sequence_inc == FALSE, NULL);

So this can't possibly ever work correctly.

One possible fix is probably:
+ e_cal_component_commit_sequence (clone);
in between the e_cal_component_set_dtend() and the
e_cal_component_get_icalcomponent() calls.

The "Split multi-day events" is probably another problem, in that same function.
Reassigning to evolution, as the conduits is actually there.

Comment 2 Dave Malcolm 2005-05-10 18:49:52 UTC
I've filed this upstream here:
http://bugzilla.gnome.org/show_bug.cgi?id=303702

Comment 3 Bastien Nocera 2005-05-10 21:53:29 UTC
Created attachment 114232 [details]
evo-conduits-multi-day-crash.patch

Comment 11 Dave Malcolm 2005-08-26 21:42:23 UTC
Adding patch to rawhide; built as evolution-2.3.8-3
Adding patch to FC-3 for an update; building as evolution-2.0.4-7

Comment 12 Dave Malcolm 2005-08-26 23:53:36 UTC
Test update for FC3 here:
https://www.redhat.com/archives/fedora-test-list/2005-August/msg00271.html

Comment 18 Dave Malcolm 2005-11-30 19:18:41 UTC
Upstream committed a slightly different patch with better-looking error-handling.

Comment 23 Red Hat Bugzilla 2006-03-07 18:31:35 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2006-0002.html



Note You need to log in before you can comment on or make changes to this bug.