core: fix possible crash in g_utf8_validate()
We can skip additional UTF-8 validity check when parsing operator. mm_charset_take_and_convert_to_utf8() already does a UTF-8 validity check internally before returning the string, so it's pointless to do a new one on the returned string. Plus, mm_charset_take_and_convert_to_utf8() may really return NULL, which would end up in segfaulting as g_utf8_validate() expects always a non-NULL string. Based on 219424a6e2d017491a05ecbed661bccde3f991ef (MM_06 branch)
This commit is contained in:
@@ -1511,13 +1511,14 @@ mm_3gpp_parse_operator (const gchar *reply,
|
||||
* string of the bytes of the operator name as encoded by the current
|
||||
* character set.
|
||||
*/
|
||||
if (cur_charset == MM_MODEM_CHARSET_UCS2)
|
||||
if (cur_charset == MM_MODEM_CHARSET_UCS2) {
|
||||
/* In this case we're already checking UTF-8 validity */
|
||||
operator = mm_charset_take_and_convert_to_utf8 (operator, MM_MODEM_CHARSET_UCS2);
|
||||
|
||||
}
|
||||
/* Ensure the operator name is valid UTF-8 so that we can send it
|
||||
* through D-Bus and such.
|
||||
*/
|
||||
if (!g_utf8_validate (operator, -1, NULL)) {
|
||||
else if (!g_utf8_validate (operator, -1, NULL)) {
|
||||
g_free (operator);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1525,7 +1526,7 @@ mm_3gpp_parse_operator (const gchar *reply,
|
||||
/* Some modems (Novatel LTE) return the operator name as "Unknown" when
|
||||
* it fails to obtain the operator name. Return NULL in such case.
|
||||
*/
|
||||
if (g_ascii_strcasecmp (operator, "unknown") == 0) {
|
||||
if (operator && g_ascii_strcasecmp (operator, "unknown") == 0) {
|
||||
g_free (operator);
|
||||
return NULL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user