diff options
author | Vadim Yanitskiy <axilirator@gmail.com> | 2018-01-20 04:52:43 +0600 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-01-22 10:35:53 +0000 |
commit | bd33a9568e0d8e7fca6f4cbbaa224277ed1c3fef (patch) | |
tree | c7c16937d854a908e7a9f577e972cc55e39bbae6 /tests/ussd | |
parent | 3da793857d78142e3594c67f4405ad19b57e9cd1 (diff) |
tests/ussd: prevent uninitialized memory access
Previously an incorrect length value was passed to both
gsm_7bit_decode_n_ussd() and gsm_7bit_encode_n_ussd()
functions during test_7bit_ussd() execution, due to:
octets_written = strlen(decoded);
The problem is that a 7-bit encoded string takes less memory
than its 8-bit equivalent. So, here strlen() returns one-byte
bigger value, that octets_written is. This then causes the
uninitialized memory access.
Found using Valgrind:
Conditional jump or move depends on uninitialised value(s)
at 0x506DCCC: gsm_7bit_decode_n_ussd (gsm_utils.c:248)
by 0x40134B: test_7bit_ussd (ussd_test.c:104)
by 0x400F5D: main (ussd_test.c:161)
Conditional jump or move depends on uninitialised value(s)
at 0x506DBB7: gsm_7bit_decode_n_hdr (gsm_utils.c:220)
by 0x506DC9E: gsm_7bit_decode_n_ussd (gsm_utils.c:246)
by 0x40134B: test_7bit_ussd (ussd_test.c:104)
by 0x400F5D: main (ussd_test.c:161)
Conditional jump or move depends on uninitialised value(s)
at 0x506DBCB: gsm_septet_lookup (gsm_utils.c:153)
by 0x506DBCB: gsm_7bit_decode_n_hdr (gsm_utils.c:224)
by 0x506DC9E: gsm_7bit_decode_n_ussd (gsm_utils.c:246)
by 0x40134B: test_7bit_ussd (ussd_test.c:104)
by 0x400F5D: main (ussd_test.c:161)
Change-Id: Ic31805b6a5a917dfc6284edba6ffdd21246ac20c
Diffstat (limited to 'tests/ussd')
-rw-r--r-- | tests/ussd/ussd_test.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/tests/ussd/ussd_test.c b/tests/ussd/ussd_test.c index 8d88dbb1..429c72de 100644 --- a/tests/ussd/ussd_test.c +++ b/tests/ussd/ussd_test.c @@ -90,8 +90,7 @@ static void test_7bit_ussd(const char *text, const char *encoded_hex, const char OSMO_ASSERT(strcmp(encoded_hex, osmo_hexdump_nospc(coded, octets_written)) == 0); gsm_7bit_decode_n_ussd(decoded, sizeof(decoded), coded, octets_written * 8 / 7); - octets_written = strlen(decoded); - printf("decoded = %s\n\n", osmo_hexdump((uint8_t *)decoded, octets_written)); + printf("decoded = %s\n\n", osmo_hexdump((uint8_t *)decoded, strlen(decoded))); OSMO_ASSERT(strncmp(text, decoded, strlen(text)) == 0); OSMO_ASSERT(strcmp(appended_after_decode, decoded + strlen(text)) == 0); |