48 lines
2.0 KiB
Diff
48 lines
2.0 KiB
Diff
commit 8ee69e06336d65b15364f4db82d91775d0fe47c6
|
|
Author: Paul Stewart <pstew@google.com>
|
|
Date: Sat Oct 9 17:29:51 2010 +0300
|
|
|
|
dbus_new_handlers: Don't send NULL to dbus_message_new_error
|
|
|
|
The new DBus API helper function wpas_dbus_error_unknown_error
|
|
function can be called as a result of a failure within internal
|
|
getter calls, which will call this function with a NULL message
|
|
parameter. However, dbus_message_new_error looks very unkindly
|
|
(i.e, abort()) on a NULL message, so in this case, we should not
|
|
call it.
|
|
|
|
I've observed this course of events during a call to
|
|
wpas_dbus_getter_bss_wpa with a faileld parse of the IE parameter.
|
|
We got here through a call to fill_dict_with_properties which
|
|
explicitly calls getters with a NULL message parameter. Judging
|
|
from the way it is called, this could easily occur if an AP sends
|
|
out a malformed (or mis-received) probe response. I usually run
|
|
into this problem while driving through San Francisco, so I'm
|
|
exposed to any number of base stations along this path.
|
|
|
|
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
|
|
index 73f4e44..0ad51a0 100644
|
|
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
|
|
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
|
|
@@ -117,6 +117,20 @@ static char * wpas_dbus_new_decompose_object_path(const char *path,
|
|
DBusMessage * wpas_dbus_error_unknown_error(DBusMessage *message,
|
|
const char *arg)
|
|
{
|
|
+ /*
|
|
+ * This function can be called as a result of a failure
|
|
+ * within internal getter calls, which will call this function
|
|
+ * with a NULL message parameter. However, dbus_message_new_error
|
|
+ * looks very unkindly (i.e, abort()) on a NULL message, so
|
|
+ * in this case, we should not call it.
|
|
+ */
|
|
+ if (message == NULL) {
|
|
+ wpa_printf(MSG_INFO, "dbus: wpas_dbus_error_unknown_error "
|
|
+ "called with NULL message (arg=%s)",
|
|
+ arg ? arg : "N/A");
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
return dbus_message_new_error(message, WPAS_DBUS_ERROR_UNKNOWN_ERROR,
|
|
arg);
|
|
}
|