>diff --git a/plugins/supplicant.c b/plugins/supplicant.c
>index e9612f3..d955f6f 100644
>--- a/plugins/supplicant.c
>+++ b/plugins/supplicant.c
>@@ -929,7 +929,8 @@ static void extract_ssid(DBusMessageIter *value,
> {
>       DBusMessageIter array;
>       unsigned char *ssid;
>-      int ssid_len;
>+      int ssid_len, i;
>+      char *d;
>
>       dbus_message_iter_recurse(value, &array);
>       dbus_message_iter_get_fixed_array(&array, &ssid, &ssid_len);
>@@ -948,7 +949,12 @@ static void extract_ssid(DBusMessageIter *value,
>       if (result->name == NULL)
>               return;
>
>-      memcpy(result->name, ssid, ssid_len);
>+      d =  result->name;
>+      for (i = 0; i < ssid_len; i++)
>+              if (g_ascii_isprint(ssid[i]))
>+                      *d++ = ssid[i];
>+
>+      *d = '\0';
> }
>
> static void extract_wpaie(DBusMessageIter *value,
>diff --git a/src/device.c b/src/device.c
>index a2507b5..fb53e72 100644
>--- a/src/device.c
>+++ b/src/device.c
>@@ -468,6 +468,20 @@ static char *build_group(const unsigned char *ssid,
>unsigned int ssid_len,
>       return g_string_free(str, FALSE);
> }
>
>+static char *build_network_name(const char *ssid, char *name,
>+                              unsigned int ssid_len)
>+{
>+      unsigned int i;
>+      char *d = name;
>+
>+      for (i = 0; i < ssid_len; i++)
>+              if (g_ascii_isprint(ssid[i]))
>+                      *d++ = ssid[i];
>+
>+      *d = '\0';
>+      return name;
>+}
>+
> static DBusMessage *join_network(DBusConnection *conn,
>                                       DBusMessage *msg, void *data)
> {
>@@ -517,10 +531,22 @@ static DBusMessage *join_network(DBusConnection *conn,
>               switch (dbus_message_iter_get_arg_type(&value)) {
>               case DBUS_TYPE_STRING:
>                       dbus_message_iter_get_basic(&value, &str);
>-                      if (g_str_equal(key, "WiFi.SSID") == TRUE)
>+                      if (g_str_equal(key, "WiFi.SSID") == TRUE) {
>+                              char *name;
>+
>                               connman_network_set_blob(network, key,
>                                                       str, strlen(str));
>-                      else
>+                              name = g_try_malloc0(strlen(str) + 1);
>+                              if (name == NULL)
>+                                      return __connman_error_failed(msg,
>+                                                                    -ENOMEM);
>+
>+                              name = build_network_name((char *)str, name,
>+                                                        strlen(str));
>+                              connman_network_set_name(network, name);
>+                              g_free(name);
>+
>+                      } else
>                               connman_network_set_string(network, key, str);
>                       break;
>               }
The patch is ok to me.

I have also ever submit a patch to fix the issue. Still a small part of the 
patch has not been accepted by Marcel.
I think the patch is also critical to fix the bug. Could you have a look at it.
The mail title is: 
"patch to fix connect hidden Guest issue. bug 3445"


_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to