aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-week-view.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2010-05-14 05:49:58 +0800
committerMilan Crha <mcrha@redhat.com>2010-05-14 05:49:58 +0800
commit5a124a6add633ba4af8babc8de7a8a9b8058899e (patch)
tree9fd9c187c4ac640eeb10c8586c90c3b9c5ec7380 /calendar/gui/e-week-view.c
parentb936a2301feb69f420d930f8f74436dde35b9f04 (diff)
downloadgsoc2013-evolution-5a124a6add633ba4af8babc8de7a8a9b8058899e.tar
gsoc2013-evolution-5a124a6add633ba4af8babc8de7a8a9b8058899e.tar.gz
gsoc2013-evolution-5a124a6add633ba4af8babc8de7a8a9b8058899e.tar.bz2
gsoc2013-evolution-5a124a6add633ba4af8babc8de7a8a9b8058899e.tar.lz
gsoc2013-evolution-5a124a6add633ba4af8babc8de7a8a9b8058899e.tar.xz
gsoc2013-evolution-5a124a6add633ba4af8babc8de7a8a9b8058899e.tar.zst
gsoc2013-evolution-5a124a6add633ba4af8babc8de7a8a9b8058899e.zip
Bug #607257 - Add checks for event->comp_data != NULL
Diffstat (limited to 'calendar/gui/e-week-view.c')
-rw-r--r--calendar/gui/e-week-view.c155
1 files changed, 151 insertions, 4 deletions
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index 5e850f53ab..173b79bbd5 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -1043,7 +1043,7 @@ e_week_view_get_text_color (EWeekView *week_view, EWeekViewEvent *event, GtkWidg
green = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].green;
blue = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].blue;
- if (gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)), event->comp_data),
+ if (is_comp_data_valid (event) && gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)), event->comp_data),
&bg_color)) {
GdkColormap *colormap;
colormap = gtk_widget_get_colormap (GTK_WIDGET (week_view));
@@ -1520,9 +1520,16 @@ e_week_view_focus (GtkWidget *widget, GtkDirectionType direction)
EWeekViewEventSpan *span;
gint current_day;
+ if (!is_array_index_in_bounds (week_view->events, new_event_num))
+ break;
+
event = &g_array_index (week_view->events,
EWeekViewEvent,
new_event_num);
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + new_span_num))
+ break;
+
span = &g_array_index (week_view->spans,
EWeekViewEventSpan,
event->spans_index + new_span_num);
@@ -1552,9 +1559,15 @@ e_week_view_get_selected_events (ECalendarView *cal_view)
g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), NULL);
if (week_view->editing_event_num != -1) {
+ if (!is_array_index_in_bounds (week_view->events, week_view->editing_event_num))
+ return NULL;
+
event = &g_array_index (week_view->events, EWeekViewEvent,
week_view->editing_event_num);
} else if (week_view->popup_event_num != -1) {
+ if (!is_array_index_in_bounds (week_view->events, week_view->popup_event_num))
+ return NULL;
+
event = &g_array_index (week_view->events, EWeekViewEvent,
week_view->popup_event_num);
}
@@ -2129,6 +2142,9 @@ set_text_as_bold (EWeekViewEvent *event, EWeekViewEventSpan *span)
gchar *address;
ECalComponentAttendee *at = NULL;
+ if (!is_comp_data_valid (event))
+ return;
+
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
address = itip_get_comp_attendee (comp, event->comp_data->client);
@@ -2174,6 +2190,9 @@ e_week_view_foreach_event_with_uid (EWeekView *week_view,
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
+ if (!is_comp_data_valid (event))
+ continue;
+
u = icalcomponent_get_uid (event->comp_data->icalcomp);
if (u && !strcmp (uid, u)) {
if (!(*callback) (week_view, event_num, data))
@@ -2191,6 +2210,9 @@ e_week_view_remove_event_cb (EWeekView *week_view,
EWeekViewEventSpan *span;
gint span_num;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return TRUE;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
if (!event)
return TRUE;
@@ -2203,13 +2225,17 @@ e_week_view_remove_event_cb (EWeekView *week_view,
if (week_view->popup_event_num == event_num)
week_view->popup_event_num = -1;
- g_object_unref (event->comp_data);
+ if (is_comp_data_valid (event))
+ g_object_unref (event->comp_data);
event->comp_data = NULL;
if (week_view->spans) {
/* We leave the span elements in the array, but set the canvas item
pointers to NULL. */
for (span_num = 0; span_num < event->num_spans; span_num++) {
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ break;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
@@ -2307,6 +2333,9 @@ e_week_view_get_span_position (EWeekView *week_view,
g_return_val_if_fail (span_num < event->num_spans, FALSE);
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ return FALSE;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
@@ -2349,7 +2378,14 @@ ewv_pass_gdkevent_to_etext (EWeekView *week_view, GdkEvent *gevent)
EWeekViewEvent *event;
EWeekViewEventSpan *span;
+ if (!is_array_index_in_bounds (week_view->events, week_view->editing_event_num))
+ return FALSE;
+
event = &g_array_index (week_view->events, EWeekViewEvent, week_view->editing_event_num);
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + week_view->editing_span_num))
+ return FALSE;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + week_view->editing_span_num);
if (span->text_item && E_IS_TEXT (span->text_item)) {
@@ -2660,7 +2696,9 @@ e_week_view_free_events (EWeekView *week_view)
for (event_num = 0; event_num < week_view->events->len; event_num++) {
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
- g_object_unref (event->comp_data);
+
+ if (is_comp_data_valid (event))
+ g_object_unref (event->comp_data);
}
g_array_set_size (week_view->events, 0);
@@ -2842,6 +2880,9 @@ e_week_view_reshape_events (EWeekView *week_view)
for (event_num = 0; event_num < week_view->events->len; event_num++) {
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
+ if (!is_comp_data_valid (event))
+ continue;
+
for (span_num = 0; span_num < event->num_spans; span_num++) {
gchar *current_comp_string;
@@ -2852,6 +2893,12 @@ e_week_view_reshape_events (EWeekView *week_view)
current_comp_string = icalcomponent_as_ical_string_r (event->comp_data->icalcomp);
if (strncmp (current_comp_string, week_view->last_edited_comp_string,50) == 0) {
EWeekViewEventSpan *span;
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num)) {
+ g_free (current_comp_string);
+ continue;
+ }
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + span_num);
e_canvas_item_grab_focus (span->text_item, TRUE);
g_free (week_view->last_edited_comp_string);
@@ -2900,6 +2947,9 @@ tooltip_get_view_event (EWeekView *week_view, gint day, gint event_num)
{
EWeekViewEvent *pevent;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return NULL;
+
pevent = &g_array_index (week_view->events, EWeekViewEvent, event_num);
return pevent;
@@ -2998,7 +3048,17 @@ e_week_view_reshape_event_span (EWeekView *week_view,
PangoFontMetrics *font_metrics;
PangoLayout *layout;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
+
+ if (!is_comp_data_valid (event))
+ return;
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ return;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
comp = e_cal_component_new ();
@@ -3268,7 +3328,17 @@ e_week_view_start_editing_event (EWeekView *week_view,
&& span_num == week_view->editing_span_num)
return TRUE;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return FALSE;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
+
+ if (!is_comp_data_valid (event))
+ return FALSE;
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ return FALSE;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
@@ -3280,7 +3350,12 @@ e_week_view_start_editing_event (EWeekView *week_view,
return FALSE;
if (week_view->editing_event_num >= 0) {
- EWeekViewEvent *editing = &g_array_index (week_view->events, EWeekViewEvent, week_view->editing_event_num);
+ EWeekViewEvent *editing;
+
+ if (!is_array_index_in_bounds (week_view->events, week_view->editing_event_num))
+ return FALSE;
+
+ editing = &g_array_index (week_view->events, EWeekViewEvent, week_view->editing_event_num);
/* do not change to other part of same component - the event is spread into more days */
if (editing && event && editing->comp_data == event->comp_data)
@@ -3317,6 +3392,10 @@ e_week_view_start_editing_event (EWeekView *week_view,
}
g_return_val_if_fail (event_num >= 0, FALSE);
}
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ return FALSE;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + span_num);
/* Try to move the cursor to the end of the text. */
@@ -3361,7 +3440,17 @@ cancel_editing (EWeekView *week_view)
g_return_if_fail (event_num != -1);
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
+
+ if (!is_comp_data_valid (event))
+ return;
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ return;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + span_num);
/* Reset the text to what was in the component */
@@ -3417,9 +3506,15 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item,
&event_num, &span_num))
return FALSE;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return FALSE;
+
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
+ if (!is_comp_data_valid (event))
+ return FALSE;
+
/* if we started to editing new item on the canvas, then do not open editing dialog until it's saved,
because the save of the event recalculates event numbers and you can edit different one */
if (!is_icalcomp_on_the_server (event->comp_data->icalcomp, event->comp_data->client))
@@ -3446,6 +3541,9 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item,
return FALSE;
}
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return FALSE;
+
e = &g_array_index (week_view->events, EWeekViewEvent, event_num);
if (!gtk_widget_has_focus (GTK_WIDGET (week_view)))
@@ -3583,8 +3681,14 @@ static gboolean e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDir
if (event_num == -1)
return FALSE;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return FALSE;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
+ if (!is_comp_data_valid (event))
+ return FALSE;
+
end_dt = event->end;
start_time = icalcomponent_get_dtstart (event->comp_data->icalcomp);
end_time = icalcomponent_get_dtend (event->comp_data->icalcomp);
@@ -3711,7 +3815,14 @@ e_week_view_change_event_time (EWeekView *week_view, time_t start_dt, time_t end
if (event_num == -1)
return;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
+
+ if (!is_comp_data_valid (event))
+ return;
+
client = event->comp_data->client;
/* We use a temporary shallow copy of the ico since we don't want to
@@ -3818,7 +3929,17 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
if (event_num == -1)
return;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
+
+ if (!is_comp_data_valid (event))
+ return;
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ return;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
@@ -3967,6 +4088,9 @@ e_week_view_find_event_from_item (EWeekView *week_view,
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
for (span_num = 0; span_num < event->num_spans; span_num++) {
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + span_num))
+ continue;
+
span = &g_array_index (week_view->spans,
EWeekViewEventSpan,
event->spans_index + span_num);
@@ -4009,6 +4133,9 @@ e_week_view_find_event_from_uid (EWeekView *week_view,
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
+ if (!is_comp_data_valid (event))
+ continue;
+
if (event->comp_data->client != client)
continue;
@@ -4040,10 +4167,16 @@ e_week_view_is_one_day_event (EWeekView *week_view,
EWeekViewEvent *event;
EWeekViewEventSpan *span;
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return FALSE;
+
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
if (event->num_spans != 1)
return FALSE;
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index))
+ return FALSE;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index);
@@ -4172,8 +4305,15 @@ e_week_view_add_new_event_in_selected_range (EWeekView *week_view, const gchar *
return FALSE;
}
+ if (!is_array_index_in_bounds (week_view->events, event_num))
+ return FALSE;
+
wvevent = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
+
+ if (!is_array_index_in_bounds (week_view->spans, wvevent->spans_index + 0))
+ return FALSE;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
wvevent->spans_index + 0);
@@ -4553,8 +4693,15 @@ e_week_view_paste_text (ECalendarView *cal_view)
!e_week_view_add_new_event_in_selected_range (week_view, NULL))
return;
+ if (!is_array_index_in_bounds (week_view->events, week_view->editing_event_num))
+ return;
+
event = &g_array_index (week_view->events, EWeekViewEvent,
week_view->editing_event_num);
+
+ if (!is_array_index_in_bounds (week_view->spans, event->spans_index + week_view->editing_span_num))
+ return;
+
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + week_view->editing_span_num);