Index: daemon/daemon-connection.c
===================================================================
RCS file: /cvs/gnome/gnome-vfs/daemon/daemon-connection.c,v
retrieving revision 1.5
diff -u -r1.5 daemon-connection.c
--- daemon/daemon-connection.c	2 Nov 2006 10:14:58 -0000	1.5
+++ daemon/daemon-connection.c	6 Nov 2006 23:20:41 -0000
@@ -2315,13 +2315,9 @@
 			ret_len = va_arg (args, gint *);
 
 			dbus_message_iter_recurse (&iter, &array_iter);
-			if (dbus_message_iter_get_array_len (&array_iter) > 0) {
-				dbus_message_iter_get_fixed_array (&array_iter,
-								   ret_data,
-								   ret_len);
-			} else {
-				*ret_len = 0;
-			}
+			dbus_message_iter_get_fixed_array (&array_iter,
+							   ret_data,
+							   ret_len);
 			break;
 		}
 		case DVD_TYPE_LAST:
Index: libgnomevfs/gnome-vfs-daemon-method.c
===================================================================
RCS file: /cvs/gnome/gnome-vfs/libgnomevfs/gnome-vfs-daemon-method.c,v
retrieving revision 1.11
diff -u -r1.11 gnome-vfs-daemon-method.c
--- libgnomevfs/gnome-vfs-daemon-method.c	2 Nov 2006 09:54:55 -0000	1.11
+++ libgnomevfs/gnome-vfs-daemon-method.c	6 Nov 2006 23:20:42 -0000
@@ -972,9 +972,9 @@
 	}
 
 	dbus_message_iter_recurse (&iter, &array_iter);
-	if (dbus_message_iter_get_array_len (&array_iter) > 0) {
-		dbus_message_iter_get_fixed_array (&array_iter, &data, &size);
-		
+
+	dbus_message_iter_get_fixed_array (&array_iter, &data, &size);
+	if (size > 0) {
 		memcpy (buffer, data, size);
 	} 
 
Index: libgnomevfs/gnome-vfs-module-callback-marshall.c
===================================================================
RCS file: /cvs/gnome/gnome-vfs/libgnomevfs/gnome-vfs-module-callback-marshall.c,v
retrieving revision 1.8
diff -u -r1.8 gnome-vfs-module-callback-marshall.c
--- libgnomevfs/gnome-vfs-module-callback-marshall.c	6 Jul 2006 12:11:20 -0000	1.8
+++ libgnomevfs/gnome-vfs-module-callback-marshall.c	6 Nov 2006 23:20:42 -0000
@@ -645,8 +645,17 @@
         if (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_ARRAY) {
                 dbus_message_iter_recurse (iter, &array_iter);
 
-		question_in->choices = g_new (char *, dbus_message_iter_get_array_len (&array_iter) + 1);
+		cnt = 0;
+		while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRING) {
+			cnt++;
+			if(!dbus_message_iter_next (&array_iter)) {
+				break;
+			}
+		}
 
+		question_in->choices = g_new (char *, cnt + 1);
+
+                dbus_message_iter_recurse (iter, &array_iter);
 		cnt = 0;
                 while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRING) {
 			question_in->choices[cnt++] = utils_get_string_or_null (&array_iter, FALSE);
