Unable to properly convert Orange Spain provider string (from +COPS) to UTF-8
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
ModemManager |
Fix Released
|
Medium
|
|||
modemmanager (Ubuntu) |
Fix Released
|
High
|
Unassigned | ||
Precise |
Won't Fix
|
High
|
Unassigned |
Bug Description
This appears to be reproducible quite well with Orange in Spain. Bug opened on behalf of Chris Hemsing. This is an SRU candidate for ModemManager in 12.04 if the patch can be cherry-picked and doesn't need to many modifications.
"
There is a problem with the charset, which finally leads to a SIGSEGV in
g_utf8_validate called from parse_operator.
The modem is a
Bus 002 Device 003: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800
HSDPA Modem
Kernel:
3.2.0-30-generic #48-Ubuntu SMP Fri Aug 24 16:52:48 UTC 2012 x86_64 x86_64
x86_64 GNU/Linux
What happens:
parse_operator gets called
parse_operator (reply=0x674cc0 "+COPS: 0,0,\"Orange\
cur_charset=
after the regexep, correctly
(gdb) p operator
$1 = 0x67e2e0 "Orange\241"
However, "Orange\241" is not UCS2 and therefore
operator = mm_charset_
MM_MODEM_
returns 0x0 !
The variable "operator" is not being checked and this leads to a call of
g_utf8_validate (str=0x0 (operator), max_len=-1, end=0x0)
g_utf8_validate then hits the SIGSEGV.
"
Changed in modemmanager (Ubuntu): | |
status: | New → Triaged |
importance: | Undecided → High |
assignee: | nobody → Mathieu Trudel-Lapierre (mathieu-tl) |
Changed in modemmanager (Ubuntu Precise): | |
status: | New → Triaged |
importance: | Undecided → High |
assignee: | nobody → Mathieu Trudel-Lapierre (mathieu-tl) |
Changed in modemmanager: | |
importance: | Unknown → Medium |
status: | Unknown → Fix Released |
Changed in modemmanager (Ubuntu): | |
assignee: | Mathieu Trudel-Lapierre (mathieu-tl) → nobody |
Changed in modemmanager (Ubuntu Precise): | |
assignee: | Mathieu Trudel-Lapierre (mathieu-tl) → nobody |
Weird... I'm in Spain and guess what operator I use for testing... :-)
Will try to hack a patch for this