From 23187fa108f094b2ed9d497380b63235592477b2 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Wed, 5 Dec 2018 23:24:50 +0100 Subject: gsm48_generate_mid(): mask out ODD flag from mi_type For MI encoding, see 3GPP TS 24.008, 10.5.1.4 Mobile Identity. The 'odd' flag indicates whether the last BCD nibble is used. Of course that flag should be made sure to reflect the actual length. Change-Id: Id6e695ebf9f86b295eaa7e2c6228989256f37e68 --- src/gsm/gsm48.c | 2 +- tests/gsm0408/gsm0408_test.c | 4 ++-- tests/gsm0408/gsm0408_test.ok | 8 +++----- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c index 4558dfb6..0f0889b4 100644 --- a/src/gsm/gsm48.c +++ b/src/gsm/gsm48.c @@ -611,7 +611,7 @@ uint8_t gsm48_generate_mid(uint8_t *buf, const char *id, uint8_t mi_type) uint8_t length = strnlen(id, 255), i, off = 0, odd = (length & 1) == 1; buf[0] = GSM48_IE_MOBILE_ID; - buf[2] = osmo_char2bcd(id[0]) << 4 | mi_type | (odd << 3); + buf[2] = osmo_char2bcd(id[0]) << 4 | (mi_type & GSM_MI_TYPE_MASK) | (odd << 3); /* if the length is even we will fill half of the last octet */ buf[1] = (length + (odd ? 1 : 2)) >> 1; diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index c786d389..9bb320d0 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -380,7 +380,7 @@ static const struct test_mid_encode_decode_test test_mid_encode_decode_tests[] = { .mi_type = GSM_MI_TYPE_IMSI | GSM_MI_ODD, .mi_str = "423423", - .expect_mi_tlv_hex = "1704493224f3", /* encodes "odd" for even number of digits! */ + .expect_mi_tlv_hex = "1704413224f3", }, { .mi_type = GSM_MI_TYPE_IMSI, @@ -464,7 +464,7 @@ static const struct test_mid_encode_decode_test test_mid_encode_decode_tests[] = { .mi_type = GSM_MI_ODD, .mi_str = "1234", - .expect_mi_tlv_hex = "17031832f4", /* encoding invalid MI type, and "odd" for an even number of digits */ + .expect_mi_tlv_hex = "17031032f4", /* encoding invalid MI type */ .expect_str = "", }, }; diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok index 2db58de8..6e99f5b3 100644 --- a/tests/gsm0408/gsm0408_test.ok +++ b/tests/gsm0408/gsm0408_test.ok @@ -14,10 +14,8 @@ Testing Mobile Identity conversions -> MI-TLV-hex='1704413224f3' -> MI-str="423423" rc=7 - unknown 0x9 423423 - -> MI-TLV-hex='1704493224f3' - -> MI-str="423423F" rc=8 - ERROR: expected MI-str="423423" - ERROR: expected rc=7 + -> MI-TLV-hex='1704413224f3' + -> MI-str="423423" rc=7 - IMSI 4234235 -> MI-TLV-hex='170449322453' -> MI-str="4234235" rc=8 @@ -58,7 +56,7 @@ Testing Mobile Identity conversions -> MI-TLV-hex='17031032f4' -> MI-str="" rc=1 - unknown 0x8 1234 - -> MI-TLV-hex='17031832f4' + -> MI-TLV-hex='17031032f4' -> MI-str="" rc=1 Decoding zero length Mobile Identities -- cgit v1.2.3