]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
_dbus_listen_tcp_socket: Don't rely on dbus_realloc setting errno
authorSimon McVittie <smcv@collabora.com>
Tue, 21 Nov 2017 14:43:01 +0000 (14:43 +0000)
committerSimon McVittie <smcv@collabora.com>
Fri, 24 Nov 2017 13:42:27 +0000 (13:42 +0000)
dbus_realloc() doesn't guarantee to set errno (if it did, the
only reasonable thing it could set it to would be ENOMEM). In
particular, faking OOM conditions doesn't set it. This can cause an
assertion failure when OOM tests assert that the only error that can
validly occur is DBUS_ERROR_NO_MEMORY.

Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=89104
(cherry picked from commit 9ded6907e66b89c3c74620a4485e8f752f092a60)

dbus/dbus-sysdeps-unix.c

index bebf2073b680549991e7eb8a9071471ec6cd42a9..b0ba89919dabcc5829cbac0df841b4a554fd80a9 100644 (file)
@@ -1576,11 +1576,9 @@ _dbus_listen_tcp_socket (const char     *host,
       newlisten_fd = dbus_realloc(listen_fd, sizeof(DBusSocket)*(nlisten_fd+1));
       if (!newlisten_fd)
         {
-          saved_errno = errno;
           _dbus_close (fd, NULL);
-          dbus_set_error (error, _dbus_error_from_errno (saved_errno),
-                          "Failed to allocate file handle array: %s",
-                          _dbus_strerror (saved_errno));
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY,
+                          "Failed to allocate file handle array");
           goto failed;
         }
       listen_fd = newlisten_fd;