[evolution-data-server] Bug #654472 - Crash on async error return over GDBus
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug #654472 - Crash on async error return over GDBus
- Date: Wed, 27 Jul 2011 12:51:26 +0000 (UTC)
commit f6ea071fb544397462a253a23481cc728290a0f2
Author: Milan Crha <mcrha redhat com>
Date: Wed Jul 27 14:51:00 2011 +0200
Bug #654472 - Crash on async error return over GDBus
libedataserver/e-gdbus-templates.c | 59 +++++++++++++++++++++++++-----------
1 files changed, 41 insertions(+), 18 deletions(-)
---
diff --git a/libedataserver/e-gdbus-templates.c b/libedataserver/e-gdbus-templates.c
index 04f726d..1494222 100644
--- a/libedataserver/e-gdbus-templates.c
+++ b/libedataserver/e-gdbus-templates.c
@@ -257,8 +257,9 @@ e_gdbus_signal_emission_hook_async_void (GSignalInvocationHint *ihint, guint n_p
g_variant_builder_add_value (builder, item);
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
+
+ param_values++;
}
- param_values++;
params = g_variant_builder_end (builder);
g_variant_builder_unref (builder);
@@ -301,16 +302,21 @@ e_gdbus_signal_emission_hook_async_boolean (GSignalInvocationHint *ihint, guint
item = g_variant_new_string (arg_error->message);
g_variant_builder_add_value (builder, item);
g_free (dbus_error_name);
+
+ /* fake value for easier processing in e_gdbus_proxy_emit_signal() */
+ item = g_variant_new_boolean (FALSE);
+ g_variant_builder_add_value (builder, item);
} else {
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
+
+ param_values++;
+ item = g_variant_new_boolean (g_value_get_boolean (param_values));
+ g_variant_builder_add_value (builder, item);
+ param_values++;
}
- param_values++;
- item = g_variant_new_boolean (g_value_get_boolean (param_values));
- g_variant_builder_add_value (builder, item);
- param_values++;
params = g_variant_builder_end (builder);
g_variant_builder_unref (builder);
@@ -353,16 +359,21 @@ e_gdbus_signal_emission_hook_async_string (GSignalInvocationHint *ihint, guint n
item = g_variant_new_string (arg_error->message);
g_variant_builder_add_value (builder, item);
g_free (dbus_error_name);
+
+ /* fake value for easier processing in e_gdbus_proxy_emit_signal() */
+ item = g_variant_new_string ("");
+ g_variant_builder_add_value (builder, item);
} else {
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
+
+ param_values++;
+ item = g_variant_new_string (g_value_get_string (param_values));
+ g_variant_builder_add_value (builder, item);
+ param_values++;
}
- param_values++;
- item = g_variant_new_string (g_value_get_string (param_values));
- g_variant_builder_add_value (builder, item);
- param_values++;
params = g_variant_builder_end (builder);
g_variant_builder_unref (builder);
@@ -400,23 +411,30 @@ e_gdbus_signal_emission_hook_async_strv (GSignalInvocationHint *ihint, guint n_p
param_values++;
arg_error = g_value_get_boxed (param_values);
if (arg_error) {
+ const gchar *fake_strv;
gchar *dbus_error_name = g_dbus_error_encode_gerror (arg_error);
item = g_variant_new_string (dbus_error_name ? dbus_error_name : "");
g_variant_builder_add_value (builder, item);
item = g_variant_new_string (arg_error->message);
g_variant_builder_add_value (builder, item);
g_free (dbus_error_name);
+
+ /* fake value for easier processing in e_gdbus_proxy_emit_signal() */
+ fake_strv = NULL;
+ item = g_variant_new_strv (&fake_strv, -1);
+ g_variant_builder_add_value (builder, item);
} else {
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
+
+ param_values++;
+ arg_strv = g_value_get_boxed (param_values);
+ item = g_variant_new_strv (arg_strv, -1);
+ g_variant_builder_add_value (builder, item);
+ param_values++;
}
- param_values++;
- arg_strv = g_value_get_boxed (param_values);
- item = g_variant_new_strv (arg_strv, -1);
- g_variant_builder_add_value (builder, item);
- param_values++;
params = g_variant_builder_end (builder);
g_variant_builder_unref (builder);
@@ -459,16 +477,21 @@ e_gdbus_signal_emission_hook_async_uint (GSignalInvocationHint *ihint, guint n_p
item = g_variant_new_string (arg_error->message);
g_variant_builder_add_value (builder, item);
g_free (dbus_error_name);
+
+ /* fake value for easier processing in e_gdbus_proxy_emit_signal() */
+ item = g_variant_new_uint32 (g_value_get_uint (0));
+ g_variant_builder_add_value (builder, item);
} else {
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
item = g_variant_new_string ("");
g_variant_builder_add_value (builder, item);
+
+ param_values++;
+ item = g_variant_new_uint32 (g_value_get_uint (param_values));
+ g_variant_builder_add_value (builder, item);
+ param_values++;
}
- param_values++;
- item = g_variant_new_uint32 (g_value_get_uint (param_values));
- g_variant_builder_add_value (builder, item);
- param_values++;
params = g_variant_builder_end (builder);
g_variant_builder_unref (builder);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]