aboutsummaryrefslogtreecommitdiff
path: root/src/mm-charsets.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2023-05-18 20:54:49 +0000
committerAleksander Morgado <aleksander@aleksander.es>2023-05-18 21:00:45 +0000
commitb70fd80c0fb3ce56e6722898eadee38a945e1cbb (patch)
treeebcfa947b4121bb70dcfcd608ce90e6f73b1f80f /src/mm-charsets.c
parenta03da1f3cbe369a8c82b8bbda32c2a03b8c4b45d (diff)
charsets: fix read of uninitialized memory in gsm unpacked conversion
==1==WARNING: MemorySanitizer: use-of-uninitialized-value #0 0x59c6c88a31ef in gsm_ext_char_to_utf8 src/mm-charsets.c:256:13 #1 0x59c6c88a31ef in charset_gsm_unpacked_to_utf8 src/mm-charsets.c:339:20 #2 0x59c6c88a31ef in mm_modem_charset_bytearray_to_utf8 src/mm-charsets.c:857:30 #3 0x59c6c889babd in sms_decode_address src/mm-sms-part-3gpp.c:143:16 #4 0x59c6c8899d3a in mm_sms_part_3gpp_new_from_binary_pdu src/mm-sms-part-3gpp.c:514:15
Diffstat (limited to 'src/mm-charsets.c')
-rw-r--r--src/mm-charsets.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/mm-charsets.c b/src/mm-charsets.c
index 0cbad337..0df99471 100644
--- a/src/mm-charsets.c
+++ b/src/mm-charsets.c
@@ -310,7 +310,7 @@ charset_gsm_unpacked_to_utf8 (const guint8 *gsm,
for (i = 0; i < len; i++) {
guint8 uchars[4];
- guint8 ulen;
+ guint8 ulen = 0;
/*
* 0x00 is NULL (when followed only by 0x00 up to the
@@ -336,9 +336,11 @@ charset_gsm_unpacked_to_utf8 (const guint8 *gsm,
if (gsm[i] == GSM_ESCAPE_CHAR) {
/* Extended alphabet, decode next char */
- ulen = gsm_ext_char_to_utf8 (gsm[i+1], uchars);
- if (ulen)
- i += 1;
+ if (i + 1 < len) {
+ ulen = gsm_ext_char_to_utf8 (gsm[i + 1], uchars);
+ if (ulen)
+ i += 1;
+ }
} else {
/* Default alphabet */
ulen = gsm_def_char_to_utf8 (gsm[i], uchars);