summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2011-05-12 09:48:37 +0200
committerPatrick Ohly <patrick.ohly@intel.com>2011-06-07 11:46:42 +0200
commit72a9a2e3efeb4c572067d66b066fda90303d61cf (patch)
treec2c9584aca2fa51f33e97050f06744a922d5d9cb
parent0bfcafcf535db84f86b0f7d8e394494db897fb5f (diff)
downloadevolution-data-server-72a9a2e3efeb4c572067d66b066fda90303d61cf.tar.gz
calendar file backend: white list check for supported CalObjModType
Explicitly check that the CalObjModType is supported before starting to work on the appointment. Relies in libecal to reject completely bogus modes with an "invalid parameter" error. (cherry picked from commit bbe2d0a49089ee9f5522ce2749a009c730dd9079)
-rw-r--r--calendar/backends/file/e-cal-backend-file.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/calendar/backends/file/e-cal-backend-file.c b/calendar/backends/file/e-cal-backend-file.c
index 6925bc53d..cb78e8096 100644
--- a/calendar/backends/file/e-cal-backend-file.c
+++ b/calendar/backends/file/e-cal-backend-file.c
@@ -2414,6 +2414,16 @@ e_cal_backend_file_modify_object (ECalBackendSync *backend, EDataCal *cal, const
e_return_data_cal_error_if_fail (priv->icalcomp != NULL, NoSuchCal);
e_return_data_cal_error_if_fail (calobj != NULL, ObjectNotFound);
+ switch (mod) {
+ case CALOBJ_MOD_THIS:
+ case CALOBJ_MOD_THISANDPRIOR:
+ case CALOBJ_MOD_THISANDFUTURE:
+ case CALOBJ_MOD_ALL:
+ break;
+ default:
+ g_propagate_error (error, EDC_ERROR (NotSupported));
+ return;
+ }
/* Parse the icalendar text */
icalcomp = icalparser_parse_string ((gchar *) calobj);
@@ -2612,6 +2622,9 @@ e_cal_backend_file_modify_object (ECalBackendSync *backend, EDataCal *cal, const
g_list_free (detached);
}
break;
+ case CALOBJ_MOD_ONLY_THIS:
+ // not reached, keep compiler happy
+ break;
}
save (cbfile);
@@ -2756,6 +2769,16 @@ e_cal_backend_file_remove_object (ECalBackendSync *backend, EDataCal *cal,
e_return_data_cal_error_if_fail (priv->icalcomp != NULL, NoSuchCal);
e_return_data_cal_error_if_fail (uid != NULL, ObjectNotFound);
+ switch (mod) {
+ case CALOBJ_MOD_THIS:
+ case CALOBJ_MOD_THISANDPRIOR:
+ case CALOBJ_MOD_THISANDFUTURE:
+ case CALOBJ_MOD_ALL:
+ break;
+ default:
+ g_propagate_error (error, EDC_ERROR (NotSupported));
+ return;
+ }
*old_object = *object = NULL;
@@ -2778,6 +2801,9 @@ e_cal_backend_file_remove_object (ECalBackendSync *backend, EDataCal *cal,
*object = NULL;
break;
+ case CALOBJ_MOD_ONLY_THIS:
+ /* not reached, keep compiler happy */
+ break;
case CALOBJ_MOD_THIS :
*old_object = get_object_string_from_fileobject (obj_data, recur_id);