mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-01 07:10:12 +01:00
libnm: handle illegal characters in nm_utils_ssid_to_utf8() (rh #1243078)
g_convert_with_fallback() will fail if the SSID contains characters that
are not legal in the source encoding, which, if $LANG is not set, will
be ASCII. If this happens, replace all non-ASCII and non-printable
characters with '?'. It is possible that nm_utils_ssid_to_utf8() will
now return an empty string (e.g., the source string is actually
big-endian UTF-16 and g_strcanon() stops on the first byte), but it will
not return NULL.
https://bugzilla.redhat.com/show_bug.cgi?id=1243078
(cherry picked from commit 568b4ad31f)
This commit is contained in:
parent
a24f089728
commit
bfb6c78430
2 changed files with 30 additions and 0 deletions
|
|
@ -317,6 +317,21 @@ nm_utils_ssid_to_utf8 (const guint8 *ssid, gsize len)
|
|||
"UTF-8", e1, "?", NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
if (!converted) {
|
||||
/* If there is still no converted string, the SSID probably
|
||||
* contains characters not valid in the current locale. Convert
|
||||
* the string to ASCII instead.
|
||||
*/
|
||||
|
||||
/* Use the printable range of 0x20-0x7E */
|
||||
gchar *valid_chars = " !\"#$%&'()*+,-./0123456789:;<=>?@"
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`"
|
||||
"abcdefghijklmnopqrstuvwxyz{|}~";
|
||||
|
||||
converted = g_strndup ((const gchar *)ssid, len);
|
||||
g_strcanon (converted, valid_chars, '?');
|
||||
}
|
||||
|
||||
return converted;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -332,6 +332,21 @@ nm_utils_ssid_to_utf8 (const GByteArray *ssid)
|
|||
"UTF-8", e1, "?", NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
if (!converted) {
|
||||
/* If there is still no converted string, the SSID probably
|
||||
* contains characters not valid in the current locale. Convert
|
||||
* the string to ASCII instead.
|
||||
*/
|
||||
|
||||
/* Use the printable range of 0x20-0x7E */
|
||||
gchar *valid_chars = " !\"#$%&'()*+,-./0123456789:;<=>?@"
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`"
|
||||
"abcdefghijklmnopqrstuvwxyz{|}~";
|
||||
|
||||
converted = g_strndup ((const gchar *)ssid->data, ssid->len);
|
||||
g_strcanon (converted, valid_chars, '?');
|
||||
}
|
||||
|
||||
return converted;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue