[evolution-data-server/gnome-3-4] Bug #678856 - Crash in add_instance() at e-cal-client.c:1311
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-4] Bug #678856 - Crash in add_instance() at e-cal-client.c:1311
- Date: Tue, 26 Jun 2012 12:03:54 +0000 (UTC)
commit 15a56d6b9852fe2a3cac24b3dd92186ad46ed467
Author: Milan Crha <mcrha redhat com>
Date: Tue Jun 26 14:03:35 2012 +0200
Bug #678856 - Crash in add_instance() at e-cal-client.c:1311
calendar/libecal/e-cal-client.c | 30 ++++++++++++++++++++----------
calendar/libecal/e-cal.c | 11 +++++++----
2 files changed, 27 insertions(+), 14 deletions(-)
---
diff --git a/calendar/libecal/e-cal-client.c b/calendar/libecal/e-cal-client.c
index 7f37f4e..349e816 100644
--- a/calendar/libecal/e-cal-client.c
+++ b/calendar/libecal/e-cal-client.c
@@ -1277,12 +1277,17 @@ add_instance (ECalComponent *comp,
ECalComponentDateTime dtstart, dtend;
/* update DTSTART */
+ dtstart.value = NULL;
+ dtstart.tzid = NULL;
+
e_cal_component_get_dtstart (comp, &dtstart);
- if (instances_hold->start_zone)
- itt = icaltime_from_timet_with_zone (start, dtstart.value->is_date, instances_hold->start_zone);
- else {
- itt = icaltime_from_timet (start, dtstart.value->is_date);
+ if (instances_hold->start_zone) {
+ itt = icaltime_from_timet_with_zone (start, dtstart.value && dtstart.value->is_date, instances_hold->start_zone);
+ g_free ((gchar *) dtstart.tzid);
+ dtstart.tzid = g_strdup (icaltimezone_get_tzid (instances_hold->start_zone));
+ } else {
+ itt = icaltime_from_timet (start, dtstart.value && dtstart.value->is_date);
if (dtstart.tzid) {
g_free ((gchar *) dtstart.tzid);
dtstart.tzid = NULL;
@@ -1305,12 +1310,17 @@ add_instance (ECalComponent *comp,
g_free ((gchar *) dtstart.tzid);
/* Update DTEND */
+ dtend.value = NULL;
+ dtend.tzid = NULL;
+
e_cal_component_get_dtend (comp, &dtend);
- if (instances_hold->end_zone)
- itt = icaltime_from_timet_with_zone (end, dtend.value->is_date, instances_hold->end_zone);
- else {
- itt = icaltime_from_timet (end, dtend.value->is_date);
+ if (instances_hold->end_zone) {
+ itt = icaltime_from_timet_with_zone (end, dtend.value && dtend.value->is_date, instances_hold->end_zone);
+ g_free ((gchar *) dtend.tzid);
+ dtend.tzid = g_strdup (icaltimezone_get_tzid (instances_hold->end_zone));
+ } else {
+ itt = icaltime_from_timet (end, dtend.value && dtend.value->is_date);
if (dtend.tzid) {
g_free ((gchar *) dtend.tzid);
dtend.tzid = NULL;
@@ -1497,7 +1507,7 @@ generate_instances (ECalClient *client,
* For DATE values and DATE-TIME values without a
* TZID (i.e. floating times) we use the default
* timezone. */
- if (dtstart.tzid && !dtstart.value->is_date) {
+ if (dtstart.tzid && dtstart.value && !dtstart.value->is_date) {
start_zone = e_cal_client_resolve_tzid_cb (dtstart.tzid, client);
if (!start_zone)
start_zone = default_zone;
@@ -1505,7 +1515,7 @@ generate_instances (ECalClient *client,
start_zone = default_zone;
}
- if (dtend.tzid && !dtend.value->is_date) {
+ if (dtend.tzid && dtend.value && !dtend.value->is_date) {
end_zone = e_cal_client_resolve_tzid_cb (dtend.tzid, client);
if (!end_zone)
end_zone = default_zone;
diff --git a/calendar/libecal/e-cal.c b/calendar/libecal/e-cal.c
index c2ab5c9..e2e4fb9 100644
--- a/calendar/libecal/e-cal.c
+++ b/calendar/libecal/e-cal.c
@@ -2997,12 +2997,15 @@ add_instance (ECalComponent *comp,
ECalComponentRange *range;
ECalComponentDateTime datetime;
+ datetime.value = NULL;
+ datetime.tzid = NULL;
+
e_cal_component_get_dtstart (comp, &datetime);
if (instances_hold->start_zone)
- itt = icaltime_from_timet_with_zone (start, datetime.value->is_date, instances_hold->start_zone);
+ itt = icaltime_from_timet_with_zone (start, datetime.value && datetime.value->is_date, instances_hold->start_zone);
else {
- itt = icaltime_from_timet (start, datetime.value->is_date);
+ itt = icaltime_from_timet (start, datetime.value && datetime.value->is_date);
if (datetime.tzid) {
g_free ((gchar *) datetime.tzid);
@@ -3243,7 +3246,7 @@ try_again:
* For DATE values and DATE-TIME values without a
* TZID (i.e. floating times) we use the default
* timezone. */
- if (dtstart.tzid && !dtstart.value->is_date) {
+ if (dtstart.tzid && dtstart.value && !dtstart.value->is_date) {
start_zone = e_cal_resolve_tzid_cb (dtstart.tzid, ecal);
if (!start_zone)
start_zone = default_zone;
@@ -3251,7 +3254,7 @@ try_again:
start_zone = default_zone;
}
- if (dtend.tzid && !dtend.value->is_date) {
+ if (dtend.tzid && dtend.value && !dtend.value->is_date) {
end_zone = e_cal_resolve_tzid_cb (dtend.tzid, ecal);
if (!end_zone)
end_zone = default_zone;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]