2007-06-12 Havoc Pennington <hp@redhat.com>
authorHavoc Pennington <hp@redhat.com>
Tue, 12 Jun 2007 19:39:47 +0000 (19:39 +0000)
committerHavoc Pennington <hp@redhat.com>
Tue, 12 Jun 2007 19:39:47 +0000 (19:39 +0000)
* dbus/dbus-message.c (dbus_message_iter_open_container): improve
the checks/warnings for contained_signature a bit

ChangeLog
dbus/dbus-marshal-recursive.c
dbus/dbus-message.c

index 46d6dea..a433fd4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2007-06-12  Havoc Pennington  <hp@redhat.com>
 
+       * dbus/dbus-message.c (dbus_message_iter_open_container): improve
+       the checks/warnings for contained_signature a bit
+
+2007-06-12  Havoc Pennington  <hp@redhat.com>
+       
        * dbus/dbus-marshal-recursive.c (write_or_verify_typecode):
        improve the warning a bit if you write extra data into a message
 
index b16f4ea..3a3e805 100644 (file)
@@ -1645,9 +1645,18 @@ writer_recurse_init_and_check (DBusTypeWriter *writer,
 
       if (expected != sub->container_type)
         {
-          _dbus_warn_check_failed ("Writing an element of type %s, but the expected type here is %s\n",
-                                   _dbus_type_to_string (sub->container_type),
-                                   _dbus_type_to_string (expected));
+          if (expected != DBUS_TYPE_INVALID)
+            _dbus_warn_check_failed ("Writing an element of type %s, but the expected type here is %s\n"
+                                     "The overall signature expected here was '%s' and we are on byte %d of that signature.\n",
+                                     _dbus_type_to_string (sub->container_type),
+                                     _dbus_type_to_string (expected),
+                                     _dbus_string_get_const_data (writer->type_str), writer->type_pos);
+          else
+            _dbus_warn_check_failed ("Writing an element of type %s, but no value is expected here\n",
+                                     "The overall signature expected here was '%s' and we are on byte %d of that signature.\n",
+                                     _dbus_type_to_string (sub->container_type),
+                                     _dbus_string_get_const_data (writer->type_str), writer->type_pos);
+          
           _dbus_assert_not_reached ("bad array element or variant content written");
         }
     }
@@ -1703,11 +1712,15 @@ write_or_verify_typecode (DBusTypeWriter *writer,
         if (expected != typecode)
           {
             if (expected != DBUS_TYPE_INVALID)
-              _dbus_warn_check_failed ("Array or variant type requires that type %s be written, but %s was written\n",
-                                       _dbus_type_to_string (expected), _dbus_type_to_string (typecode));
+              _dbus_warn_check_failed ("Array or variant type requires that type %s be written, but %s was written.\n"
+                                       "The overall signature expected here was '%s' and we are on byte %d of that signature.\n",
+                                       _dbus_type_to_string (expected), _dbus_type_to_string (typecode),
+                                       _dbus_string_get_const_data (writer->type_str), writer->type_pos);
             else
-              _dbus_warn_check_failed ("Array or variant type wasn't expecting any more values to be written into it, but a value %s was written\n",
-                                       _dbus_type_to_string (typecode));
+              _dbus_warn_check_failed ("Array or variant type wasn't expecting any more values to be written into it, but a value %s was written.\n"
+                                       "The overall signature expected here was '%s' and we are on byte %d of that signature.\n",
+                                       _dbus_type_to_string (typecode),
+                                       _dbus_string_get_const_data (writer->type_str), writer->type_pos);
             _dbus_assert_not_reached ("bad type inserted somewhere inside an array or variant");
           }
       }
index a98a0f8..a64888e 100644 (file)
@@ -2350,16 +2350,19 @@ dbus_message_iter_open_container (DBusMessageIter *iter,
                              contained_signature == NULL) ||
                             (type == DBUS_TYPE_DICT_ENTRY &&
                              contained_signature == NULL) ||
-                            contained_signature != NULL, FALSE);
+                            (type == DBUS_TYPE_VARIANT &&
+                             contained_signature != NULL) ||
+                            (type == DBUS_TYPE_ARRAY &&
+                             contained_signature != NULL), FALSE);
   
-#if 0
-  /* FIXME this would fail if the contained_signature is a dict entry,
-   * since dict entries are invalid signatures standalone (they must be in
+  /* this would fail if the contained_signature is a dict entry, since
+   * dict entries are invalid signatures standalone (they must be in
    * an array)
    */
-  _dbus_return_val_if_fail (contained_signature == NULL ||
-                            _dbus_check_is_valid_signature (contained_signature));
-#endif
+  _dbus_return_val_if_fail (type == DBUS_TYPE_DICT_ENTRY ||
+                            (contained_signature == NULL ||
+                             _dbus_check_is_valid_signature (contained_signature)),
+                            FALSE);
 
   if (!_dbus_message_iter_open_signature (real))
     return FALSE;