Package: libecal1.2-7 Version: 2.30.1-1 Severity: normal Tags: patch Hi,
commit bf47a23ee4994597ca0a8757edd5ff0798435517 fixes a bug which causes a warning, and in my case caused a segmentation fault in e_cal_open_default(). I suggest to include it in the Debian package until it is included in a new upstream bugfix release. Regards, Tino -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 2.6.34-00001-g7adb552 (SMP w/2 CPU cores) Locale: LANG=C, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages libecal1.2-7 depends on: ii libc6 2.10.2-8 Embedded GNU C Library: Shared lib ii libdbus-1-3 1.2.24-1 simple interprocess messaging syst ii libdbus-glib-1-2 0.86-1 simple interprocess messaging syst ii libedataserver1.2-11 2.30.1-2 Utility library for evolution data ii libgconf2-4 2.28.1-3 GNOME configuration database syste ii libglib2.0-0 2.24.1-1 The GLib library of C routines ii libical0 0.44-3 iCalendar library implementation i ii libnspr4-0d 4.8.4-1 NetScape Portable Runtime Library ii libsoup2.4-1 2.30.1-1 an HTTP library implementation in ii libxml2 2.7.7.dfsg-2 GNOME XML library libecal1.2-7 recommends no packages. libecal1.2-7 suggests no packages. -- no debconf information
>From 2174fdbba0dcf4854c55fbbfbfa6e582d2a6fccf Mon Sep 17 00:00:00 2001 From: Milan Crha <[email protected]> Date: Thu, 06 May 2010 17:43:59 +0000 Subject: e_cal_new_from_uri/e_cal_open_default emits runtime warning The warning is "e_source_get_uri () called on source with no absolute URI!" and it's caused by freeing the ESourceList before ECal creation. This change is fixing the issue. --- diff --git a/calendar/libecal/e-cal.c b/calendar/libecal/e-cal.c index c8299d5..d28b2b8 100644 --- a/calendar/libecal/e-cal.c +++ b/calendar/libecal/e-cal.c @@ -878,23 +878,28 @@ e_cal_new (ESource *source, ECalSourceType type) /* for each known source calls check_func, which should return TRUE if the required source have been found. Function returns NULL or the source on which was returned - TRUE by the check_func. Non-NULL pointer should be unreffed by g_object_unref. */ + TRUE by the check_func. Non-NULL pointer should be unreffed by g_object_unref. + + 'sources' is an output parameter and cannot be NULL. When returned non-NULL, then + should be freed with g_object_unref function. */ static ESource * -search_known_sources (ECalSourceType type, gboolean (*check_func)(ESource *source, gpointer user_data), gpointer user_data, GError **error) +search_known_sources (ECalSourceType type, gboolean (*check_func)(ESource *source, gpointer user_data), gpointer user_data, ESourceList **sources, GError **error) { - ESourceList *sources; ESource *res = NULL; GSList *g; GError *err = NULL; + g_return_val_if_fail (sources != NULL, NULL); g_return_val_if_fail (check_func != NULL, NULL); - if (!e_cal_get_sources (&sources, type, &err)) { + *sources = NULL; + + if (!e_cal_get_sources (sources, type, &err)) { g_propagate_error (error, err); return NULL; } - for (g = e_source_list_peek_groups (sources); g; g = g->next) { + for (g = e_source_list_peek_groups (*sources); g; g = g->next) { ESourceGroup *group = E_SOURCE_GROUP (g->data); GSList *s; @@ -911,8 +916,6 @@ search_known_sources (ECalSourceType type, gboolean (*check_func)(ESource *sourc break; } - g_object_unref (sources); - return res; } @@ -943,16 +946,19 @@ check_uri (ESource *source, gpointer uri) ECal * e_cal_new_from_uri (const gchar *uri, ECalSourceType type) { + ESourceList *sources = NULL; ESource *source; ECal *cal; - source = search_known_sources (type, check_uri, (gpointer) uri, NULL); + source = search_known_sources (type, check_uri, (gpointer) uri, &sources, NULL); if (!source) source = e_source_new_with_absolute_uri ("", uri); cal = e_cal_new (source, type); g_object_unref (source); + if (sources) + g_object_unref (sources); return cal; } @@ -4056,6 +4062,7 @@ check_default (ESource *source, gpointer data) gboolean e_cal_open_default (ECal **ecal, ECalSourceType type, ECalAuthFunc func, gpointer data, GError **error) { + ESourceList *sources = NULL; GError *err = NULL; ESource *default_source; gboolean res = TRUE; @@ -4063,9 +4070,11 @@ e_cal_open_default (ECal **ecal, ECalSourceType type, ECalAuthFunc func, gpointe e_return_error_if_fail (ecal != NULL, E_CALENDAR_STATUS_INVALID_ARG); *ecal = NULL; - default_source = search_known_sources (type, check_default, NULL, &err); + default_source = search_known_sources (type, check_default, NULL, &sources, &err); if (err) { + if (sources) + g_object_unref (sources); g_propagate_error (error, err); return FALSE; } @@ -4104,6 +4113,9 @@ e_cal_open_default (ECal **ecal, ECalSourceType type, ECalAuthFunc func, gpointe *ecal = NULL; } + if (sources) + g_object_unref (sources); + return res; } -- cgit v0.8.3.1

