[gnome-control-center/gnome-3-18] network: fix some SSID escaping issues



commit 60af2f54b1d87944b0ef0241833eec3ac2b0efb3
Author: Dan Williams <dcbw redhat com>
Date:   Fri Jun 3 11:47:07 2016 -0500

    network: fix some SSID escaping issues
    
    nm_utils_escape_ssid() should only be used for debugging purposes,
    but was used in one place for UI display and another place
    for doing actual AP comparison.  Instead, the comparison should
    just operate on the SSID bytes, and the UI display should use
    nm_utils_ssid_to_utf8() which tries to interpret non-ASCII
    characters for better display.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=767205
    https://bugzilla.redhat.com/show_bug.cgi?id=1336714

 panels/network/net-device-wifi.c |   27 +++++++++++++--------------
 1 files changed, 13 insertions(+), 14 deletions(-)
---
diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c
index d2d8c95..53a4594 100644
--- a/panels/network/net-device-wifi.c
+++ b/panels/network/net-device-wifi.c
@@ -692,11 +692,11 @@ is_8021x (NMDevice   *device,
 
 static void
 wireless_try_to_connect (NetDeviceWifi *device_wifi,
-                         const gchar *ssid_target,
+                         const GByteArray *ssid,
                          const gchar *ap_object_path)
 {
-        const GByteArray *ssid;
-        const gchar *ssid_tmp;
+        const GByteArray *match_ssid;
+        const gchar *ssid_target;
         GSList *list, *l;
         NMConnection *connection_activate = NULL;
         NMDevice *device;
@@ -713,6 +713,7 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
         if (device == NULL)
                 goto out;
 
+        ssid_target = nm_utils_escape_ssid (ssid->data, ssid->len);
         g_debug ("try to connect to WIFI network %s [%s]",
                  ssid_target, ap_object_path);
 
@@ -720,17 +721,18 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
         list = net_device_get_valid_connections (NET_DEVICE (device_wifi));
         g_debug ("%i suitable remote connections to check", g_slist_length (list));
         for (l = list; l; l = g_slist_next (l)) {
+                const GByteArray *match_ssid;
                 NMConnection *connection;
 
                 connection = NM_CONNECTION (l->data);
                 setting_wireless = nm_connection_get_setting_wireless (connection);
                 if (!NM_IS_SETTING_WIRELESS (setting_wireless))
                         continue;
-                ssid = nm_setting_wireless_get_ssid (setting_wireless);
-                if (ssid == NULL)
+                match_ssid = nm_setting_wireless_get_ssid (setting_wireless);
+                if (match_ssid == NULL)
                         continue;
-                ssid_tmp = nm_utils_escape_ssid (ssid->data, ssid->len);
-                if (g_strcmp0 (ssid_target, ssid_tmp) == 0) {
+                if (ssid->len == match_ssid->len &&
+                    memcmp (ssid->data, match_ssid->data, ssid->len) == 0) {
                         g_debug ("we found an existing connection %s to activate!",
                                  nm_connection_get_id (connection));
                         connection_activate = connection;
@@ -1517,7 +1519,7 @@ make_row (GtkSizeGroup   *rows,
         GtkWidget *box;
         GtkWidget *button_stack;
         GtkWidget *image;
-        const gchar *title;
+        gchar *title;
         gboolean active;
         gboolean in_range;
         gboolean connecting;
@@ -1544,8 +1546,6 @@ make_row (GtkSizeGroup   *rows,
                 timestamp = 0;
         }
 
-        title = nm_utils_escape_ssid (ssid->data, ssid->len);
-
         if (ap != NULL) {
                 in_range = TRUE;
                 active = (ap == active_ap) && (state == NM_DEVICE_STATE_ACTIVATED);
@@ -1594,7 +1594,9 @@ make_row (GtkSizeGroup   *rows,
         if (check_out)
                 *check_out = widget;
 
+        title = nm_utils_ssid_to_utf8 (ssid);
         widget = gtk_label_new (title);
+        g_free (title);
         gtk_widget_set_margin_top (widget, 12);
         gtk_widget_set_margin_bottom (widget, 12);
         gtk_box_pack_start (GTK_BOX (row_box), widget, FALSE, FALSE, 0);
@@ -1957,16 +1959,13 @@ ap_activated (GtkListBox *list, GtkListBoxRow *row, NetDeviceWifi *device_wifi)
                                                        connection_activate_cb, device_wifi);
                 } else {
                         const GByteArray *ssid;
-                        gchar *ssid_text;
                         const gchar *object_path;
 
                         gtk_stack_set_visible_child_name (GTK_STACK (stack), "spinner");
 
                         ssid = nm_access_point_get_ssid (ap);
-                        ssid_text = g_markup_escape_text (nm_utils_escape_ssid (ssid->data, ssid->len), -1);
                         object_path = nm_object_get_path (NM_OBJECT (ap));
-                        wireless_try_to_connect (device_wifi, ssid_text, object_path);
-                        g_free (ssid_text);
+                        wireless_try_to_connect (device_wifi, ssid, object_path);
                 }
         }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]