gsm48_mi_to_string(): guard against zero length output buffer

All successful cases already return from the switch(), so simply handle all
errors below it by returning an empty string (if there is enough string
buffer).

Change-Id: I709ac3b9efb7b4258d8660715b10312e11b9b571
This commit is contained in:
Neels Hofmeyr 2018-12-05 23:30:08 +01:00 committed by Harald Welte
parent 23187fa108
commit ea2a0ab041
2 changed files with 13 additions and 13 deletions

View File

@ -653,14 +653,11 @@ int gsm48_mi_to_string(char *string, const int str_len, const uint8_t *mi,
{
int rc;
uint8_t mi_type;
char *str_cur = string;
uint32_t tmsi;
mi_type = mi[0] & GSM_MI_TYPE_MASK;
switch (mi_type) {
case GSM_MI_TYPE_NONE:
break;
case GSM_MI_TYPE_TMSI:
/* Table 10.5.4.3, reverse generate_mid_from_tmsi */
if (mi_len == GSM48_TMSI_LEN && mi[0] == (0xf0 | GSM_MI_TYPE_TMSI)) {
@ -680,12 +677,15 @@ int gsm48_mi_to_string(char *string, const int str_len, const uint8_t *mi,
return rc + 1;
else
return strlen(string) + 1;
default:
break;
}
*str_cur++ = '\0';
return str_cur - string;
if (str_len < 1)
return 0;
*string = '\0';
return 1;
}
/*! Parse TS 04.08 Routing Area Identifier

View File

@ -72,8 +72,8 @@ Decoding zero length Mobile Identities
returned empty string
- MI type: TMSI
- writing to zero-length string:
rc=1
ERROR: Wrote to invalid memory!
rc=0
nothing written
- writing to 1-byte-length string:
rc=1
returned empty string
@ -82,8 +82,8 @@ Decoding zero length Mobile Identities
returned empty string
- MI type: NONE
- writing to zero-length string:
rc=1
ERROR: Wrote to invalid memory!
rc=0
nothing written
- writing to 1-byte-length string:
rc=1
returned empty string
@ -102,8 +102,8 @@ Decoding zero length Mobile Identities
returned empty string
- MI type: TMSI | GSM_MI_ODD
- writing to zero-length string:
rc=1
ERROR: Wrote to invalid memory!
rc=0
nothing written
- writing to 1-byte-length string:
rc=1
returned empty string
@ -112,8 +112,8 @@ Decoding zero length Mobile Identities
returned empty string
- MI type: NONE | GSM_MI_ODD
- writing to zero-length string:
rc=1
ERROR: Wrote to invalid memory!
rc=0
nothing written
- writing to 1-byte-length string:
rc=1
returned empty string