[evolution-data-server] 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] Bug #678856 - Crash in add_instance() at e-cal-client.c:1311
- Date: Tue, 26 Jun 2012 12:03:33 +0000 (UTC)
commit 08706aea50edc7db95c604f85d09a38a34dff393
Author: Milan Crha <mcrha redhat com>
Date: Tue Jun 26 14:02:40 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 79859b0..e0f5149 100644
--- a/calendar/libecal/e-cal-client.c
+++ b/calendar/libecal/e-cal-client.c
@@ -1012,12 +1012,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;
@@ -1039,12 +1044,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;
@@ -1231,7 +1241,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;
@@ -1239,7 +1249,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 f011154..ecef1ed 100644
--- a/calendar/libecal/e-cal.c
+++ b/calendar/libecal/e-cal.c
@@ -2418,12 +2418,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);
@@ -2664,7 +2667,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;
@@ -2672,7 +2675,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]