---
src/gsm/gsm_utils.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c
index 3f3a73f..cf1cc2b 100644
--- a/src/gsm/gsm_utils.c
+++ b/src/gsm/gsm_utils.c
@@ -128,8 +128,8 @@ int gsm_7bit_decode_hdr(char *text, const uint8_t *user_data, uint8_t
septet_l,
int i = 0;
int shift = 0;
- uint8_t *rtext = calloc(septet_l, sizeof(uint8_t));
- uint8_t tmp;
+ uint8_t data[160];
+ uint8_t ext_septet;
/* skip the user data header */
if (ud_hdr_ind) {
@@ -140,30 +140,29 @@ int gsm_7bit_decode_hdr(char *text, const uint8_t *user_data,
uint8_t septet_l,
septet_l = septet_l - shift;
}
- for (i = 0; i < septet_l; i++) {
- rtext[i] =
+ for (i = 0; i < septet_l && i < sizeof(data); i++) {
+ data[i] =
((user_data[((i + shift) * 7 + 7) >> 3] <<
(7 - (((i + shift) * 7 + 7) & 7))) |
(user_data[((i + shift) * 7) >> 3] >>
(((i + shift) * 7) & 7))) & 0x7f;
}
- for (i = 0; i < septet_l; i++) {
+ for (i = 0; i < septet_l && i < sizeof(data); i++) {
/* this is an extension character */
- if(rtext[i] == 0x1b && i + 1 < septet_l){
- tmp = rtext[i+1];
- *(text++) = gsm_7bit_alphabet[0x7f + tmp];
+ if(data[i] == 0x1b && i + 1 < septet_l){
+ ext_septet = data[i+1];
+ *(text++) = gsm_7bit_alphabet[0x7f + ext_septet];
i++;
continue;
}
- *(text++) = gsm_septet_lookup(rtext[i]);
+ *(text++) = gsm_septet_lookup(data[i]);
}
if (ud_hdr_ind)
i += shift;
*text = '\0';
- free(rtext);
return i;
}
--
1.7.10.4
--r5Pyd7+fXNt84Ff3--
Show replies by date