[PATCH] dbus-gvalue: set an error when demarshal_basic doesn't recognize type

Andres Salomon dilinger at collabora.co.uk
Wed Aug 19 06:18:24 PDT 2009


By passing dbus_g_proxy_call an incorrect signature, we can cause
the function to fail but not provide any error message (if
G_DISABLE_ASSERT is defined).  As smvc pointed out, this can also
become a runtime error when a telepathy CM changes signature, but
the client hasn't been updated.  As such, g_assert isn't an appropriate
action.  See http://bugs.debian.org/541632 for more information.

This patch causes it to set an error when demarshalling a type that it's
not expecting.  Instead of a NULL error, one instead
sees something like the following when the method returns a path
object but the client expected a string:

"modem Create() failed: Expected type gchararray, got type code 'o'"

Signed-off-by: Andres Salomon <dilinger at collabora.co.uk>
---
 dbus/dbus-gvalue.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/dbus/dbus-gvalue.c b/dbus/dbus-gvalue.c
index 49ae16e..6ba3663 100644
--- a/dbus/dbus-gvalue.c
+++ b/dbus/dbus-gvalue.c
@@ -585,8 +585,7 @@ demarshal_basic (DBusGValueMarshalCtx      *context,
 	return TRUE;
       }
     default:
-      g_assert_not_reached ();
-      return FALSE;
+      /* fall through to invalid_type */
     }
   invalid_type:
     g_set_error (error,
-- 
1.6.3.3



More information about the dbus mailing list