diff options
Diffstat (limited to 'src/gsm/gsm48.c')
-rw-r--r-- | src/gsm/gsm48.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c index ae1a21bd..44ce7767 100644 --- a/src/gsm/gsm48.c +++ b/src/gsm/gsm48.c @@ -601,8 +601,8 @@ int osmo_mobile_identity_decode(struct osmo_mobile_identity *mi, const uint8_t * { int rc; int nibbles_len; - char *str; - size_t str_size; + char *str = NULL; /* initialize to avoid uninitialized false warnings on some gcc versions (11.1.0) */ + size_t str_size = 0; /* initialize to avoid uninitialized false warnings on some gcc versions (11.1.0) */ if (!mi_data || mi_len < 1) return -EBADMSG; @@ -677,8 +677,12 @@ int osmo_mobile_identity_decode(struct osmo_mobile_identity *mi, const uint8_t * goto return_error; } rc = osmo_bcd2str(str, str_size, mi_data, 1, 1 + nibbles_len, allow_hex); - /* rc checked below */ - break; + /* check mi->str printing rc */ + if (rc < 1 || rc >= str_size) { + rc = -EBADMSG; + goto return_error; + } + return 0; default: /* Already handled above, but as future bug paranoia: */ @@ -686,13 +690,6 @@ int osmo_mobile_identity_decode(struct osmo_mobile_identity *mi, const uint8_t * goto return_error; } - /* check mi->str printing rc */ - if (rc < 1 || rc >= str_size) { - rc = -EBADMSG; - goto return_error; - } - return 0; - return_error: *mi = (struct osmo_mobile_identity){ .type = GSM_MI_TYPE_NONE, |