From 5229080d920e44e0054cc693f1b4efe96ca822ae Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 21 Dec 2018 12:35:06 -0600 Subject: [PATCH] util: Use ell in convert_utf8_to_gsm --- src/smsutil.c | 10 +++++----- src/stkutil.c | 8 ++++---- src/util.c | 28 ++++++++++++---------------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/smsutil.c b/src/smsutil.c index 60438818..8e51274d 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -557,13 +557,13 @@ gboolean sms_encode_address_field(const struct sms_address *in, gboolean sc, return FALSE; if (written > 11) { - g_free(gsm); + l_free(gsm); return FALSE; } r = pack_7bit_own_buf(gsm, written, 0, false, &packed, 0, p); - g_free(gsm); + l_free(gsm); if (r == NULL) return FALSE; @@ -3633,7 +3633,7 @@ GSList *sms_text_prepare_with_alphabet(const char *to, const char *utf8, pack_7bit_own_buf(gsm_encoded, written, offset, false, NULL, 0, template.submit.ud + offset); - g_free(gsm_encoded); + l_free(gsm_encoded); return sms_list_append(NULL, &template); } @@ -4767,12 +4767,12 @@ gboolean ussd_encode(const char *str, long *items_written, unsigned char *pdu) converted = convert_utf8_to_gsm(str, -1, NULL, &written, 0); if (converted == NULL || written > 182) { - g_free(converted); + l_free(converted); return FALSE; } pack_7bit_own_buf(converted, written, 0, true, &num_packed, 0, pdu); - g_free(converted); + l_free(converted); if (num_packed < 1) return FALSE; diff --git a/src/stkutil.c b/src/stkutil.c index 259dc666..4b5739fd 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -4037,13 +4037,13 @@ static gboolean stk_tlv_builder_append_gsm_packed(struct stk_tlv_builder *iter, return FALSE; if (iter->len + (written * 7 + 7) / 8 >= iter->max_len) { - g_free(gsm); + l_free(gsm); return FALSE; } pack_7bit_own_buf(gsm, len, 0, false, &written, 0, iter->value + iter->len + 1); - g_free(gsm); + l_free(gsm); if (written < 1 && len > 0) return FALSE; @@ -4072,7 +4072,7 @@ static gboolean stk_tlv_builder_append_gsm_unpacked( return FALSE; if (iter->len + written >= iter->max_len) { - g_free(gsm); + l_free(gsm); return FALSE; } @@ -4080,7 +4080,7 @@ static gboolean stk_tlv_builder_append_gsm_unpacked( memcpy(iter->value + iter->len, gsm, written); iter->len += written; - g_free(gsm); + l_free(gsm); return TRUE; } diff --git a/src/util.c b/src/util.c index ccdb5fd2..13f2dd8a 100644 --- a/src/util.c +++ b/src/util.c @@ -3042,18 +3042,18 @@ unsigned char *convert_utf8_to_gsm_with_lang(const char *text, long len, res_len = 0; while ((len < 0 || text + len - in > 0) && *in) { - long max = len < 0 ? 6 : text + len - in; - gunichar c = g_utf8_get_char_validated(in, max); - unsigned short converted = GUND; + long max = len < 0 ? 4 : text + len - in; + wchar_t c; + unsigned short converted; + int nread = l_utf8_get_codepoint(in, max, &c); - if (c & 0x80000000) + if (nread < 0) goto err_out; if (c > 0xffff) goto err_out; converted = unicode_locking_shift_lookup(&t, c); - if (converted == GUND) converted = unicode_single_shift_lookup(&t, c); @@ -3065,23 +3065,20 @@ unsigned char *convert_utf8_to_gsm_with_lang(const char *text, long len, else res_len += 1; - in = g_utf8_next_char(in); + in += nread; nchars += 1; } - res = g_try_malloc(res_len + (terminator ? 1 : 0)); - if (res == NULL) - goto err_out; - + res = l_malloc(res_len + (terminator ? 1 : 0)); in = text; out = res; - for (i = 0; i < nchars; i++) { - unsigned short converted; - gunichar c = g_utf8_get_char(in); + for (i = 0; i < nchars; i++) { + wchar_t c; + unsigned short converted; + int nread = l_utf8_get_codepoint(in, 4, &c); converted = unicode_locking_shift_lookup(&t, c); - if (converted == GUND) converted = unicode_single_shift_lookup(&t, c); @@ -3092,8 +3089,7 @@ unsigned char *convert_utf8_to_gsm_with_lang(const char *text, long len, *out = converted; ++out; - - in = g_utf8_next_char(in); + in += nread; } if (terminator)