dbus-marshal-validate: Check brackets in signature nest correctly
[platform/upstream/dbus.git] / dbus / dbus-message-util.c
index 60133e1..ebf00e2 100644 (file)
  * @{
  */
 
+/**
+ * Gets the number of unix fds attached to this message.
+ *
+ * @param message the message
+ * @returns the number of file descriptors
+ */
+unsigned int
+_dbus_message_get_n_unix_fds (DBusMessage *message)
+{
+#ifdef HAVE_UNIX_FD_PASSING
+  return message->n_unix_fds;
+#else
+  return 0;
+#endif
+}
+
 #ifdef DBUS_ENABLE_EMBEDDED_TESTS
 /**
  * Reads arguments from a message iterator given a variable argument
@@ -182,6 +198,13 @@ _dbus_check_fdleaks_enter (void)
           if (fd == dirfd (d))
             continue;
 
+          if (fd >= FD_SETSIZE)
+            {
+              _dbus_verbose ("FD %d unexpectedly large; cannot track whether "
+                             "it is leaked\n", fd);
+              continue;
+            }
+
           FD_SET (fd, &fds->set);
         }
 
@@ -227,6 +250,13 @@ _dbus_check_fdleaks_leave (DBusInitialFDs *fds)
           if (fd == dirfd (d))
             continue;
 
+          if (fd >= FD_SETSIZE)
+            {
+              _dbus_verbose ("FD %d unexpectedly large; cannot track whether "
+                             "it is leaked\n", fd);
+              continue;
+            }
+
           if (FD_ISSET (fd, &fds->set))
             continue;
 
@@ -479,6 +509,8 @@ dbus_internal_do_not_use_try_message_data (const DBusString    *data,
   /* Write the data one byte at a time */
 
   loader = _dbus_message_loader_new ();
+  if (loader == NULL)
+    goto failed;
 
   /* check some trivial loader functions */
   _dbus_message_loader_ref (loader);
@@ -489,9 +521,10 @@ dbus_internal_do_not_use_try_message_data (const DBusString    *data,
     {
       DBusString *buffer;
 
-      _dbus_message_loader_get_buffer (loader, &buffer);
-      _dbus_string_append_byte (buffer,
-                                _dbus_string_get_byte (data, i));
+      _dbus_message_loader_get_buffer (loader, &buffer, NULL, NULL);
+      if (!_dbus_string_append_byte (buffer,
+                                     _dbus_string_get_byte (data, i)))
+        goto failed;
       _dbus_message_loader_return_buffer (loader, buffer);
     }
 
@@ -504,13 +537,16 @@ dbus_internal_do_not_use_try_message_data (const DBusString    *data,
   /* Write the data all at once */
 
   loader = _dbus_message_loader_new ();
+  if (loader == NULL)
+    goto failed;
 
   {
     DBusString *buffer;
 
-    _dbus_message_loader_get_buffer (loader, &buffer);
-    _dbus_string_copy (data, 0, buffer,
-                       _dbus_string_get_length (buffer));
+    _dbus_message_loader_get_buffer (loader, &buffer, NULL, NULL);
+    if (!_dbus_string_copy (data, 0, buffer,
+                            _dbus_string_get_length (buffer)))
+        goto failed;
     _dbus_message_loader_return_buffer (loader, buffer);
   }
 
@@ -523,18 +559,26 @@ dbus_internal_do_not_use_try_message_data (const DBusString    *data,
   /* Write the data 2 bytes at a time */
 
   loader = _dbus_message_loader_new ();
+  if (loader == NULL)
+    goto failed;
 
   len = _dbus_string_get_length (data);
   for (i = 0; i < len; i += 2)
     {
       DBusString *buffer;
 
-      _dbus_message_loader_get_buffer (loader, &buffer);
-      _dbus_string_append_byte (buffer,
-                                _dbus_string_get_byte (data, i));
+      _dbus_message_loader_get_buffer (loader, &buffer, NULL, NULL);
+      if (!_dbus_string_append_byte (buffer,
+                                     _dbus_string_get_byte (data, i)))
+        goto failed;
+
       if ((i+1) < len)
-        _dbus_string_append_byte (buffer,
-                                  _dbus_string_get_byte (data, i+1));
+        {
+          if (!_dbus_string_append_byte (buffer,
+                                         _dbus_string_get_byte (data, i+1)))
+            goto failed;
+        }
+
       _dbus_message_loader_return_buffer (loader, buffer);
     }
 
@@ -1497,7 +1541,7 @@ _dbus_message_test (const char *test_data_dir)
     {
       DBusString *buffer;
 
-      _dbus_message_loader_get_buffer (loader, &buffer);
+      _dbus_message_loader_get_buffer (loader, &buffer, NULL, NULL);
       _dbus_string_append_byte (buffer, data[i]);
       _dbus_message_loader_return_buffer (loader, buffer);
     }
@@ -1508,7 +1552,7 @@ _dbus_message_test (const char *test_data_dir)
     {
       DBusString *buffer;
 
-      _dbus_message_loader_get_buffer (loader, &buffer);
+      _dbus_message_loader_get_buffer (loader, &buffer, NULL, NULL);
       _dbus_string_append_byte (buffer, data[i]);
       _dbus_message_loader_return_buffer (loader, buffer);
     }