diff options
author | Denis Kenzior <denkenz@gmail.com> | 2020-09-08 11:19:54 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2020-09-08 11:19:54 -0500 |
commit | 52091a1af02fa7151c2bb6b542e51068ce20c525 (patch) | |
tree | 1ba0a62b5a1a3d1aa07b493de757f31785501d0e | |
parent | 23e1a56a47807e8db3e8a4571a47e4217d70d39d (diff) | |
download | ofono-52091a1af02fa7151c2bb6b542e51068ce20c525.tar.gz |
qmimodem: Fix format warning
../../drivers/qmimodem/network-registration.c: In function
‘extract_ss_info’:
../../drivers/qmimodem/network-registration.c:131:54: warning: ‘%03d’
directive output may be truncated writing between 3 and 5 bytes into a
region of size 4 [-Wformat-truncation=]
131 | snprintf(operator->mcc, OFONO_MAX_MCC_LENGTH + 1, "%03d",
| ^~~~
../../drivers/qmimodem/network-registration.c:131:53: note:
directive argument in the range [0, 65535]
131 | snprintf(operator->mcc, OFONO_MAX_MCC_LENGTH + 1,
"%03d",
|
^~~~~~
The MCC/MNC fields are limited to three digits. Clamp the input to 999
to avoid the warning.
-rw-r--r-- | drivers/qmimodem/network-registration.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/drivers/qmimodem/network-registration.c b/drivers/qmimodem/network-registration.c index 04f20c66..ecdc6054 100644 --- a/drivers/qmimodem/network-registration.c +++ b/drivers/qmimodem/network-registration.c @@ -128,10 +128,18 @@ static bool extract_ss_info(struct qmi_result *result, int *status, plmn = qmi_result_get(result, QMI_NAS_RESULT_CURRENT_PLMN, &len); if (plmn) { - snprintf(operator->mcc, OFONO_MAX_MCC_LENGTH + 1, "%03d", - GUINT16_FROM_LE(plmn->mcc)); - snprintf(operator->mnc, OFONO_MAX_MNC_LENGTH + 1, "%02d", - GUINT16_FROM_LE(plmn->mnc)); + uint16_t mcc = GUINT16_FROM_LE(plmn->mcc); + uint16_t mnc = GUINT16_FROM_LE(plmn->mnc); + + if (mcc > 999) + mcc = 999; + + if (mnc > 999) + mnc = 999; + + snprintf(operator->mcc, OFONO_MAX_MCC_LENGTH + 1, "%03d", mcc); + snprintf(operator->mnc, OFONO_MAX_MNC_LENGTH + 1, "%03d", mnc); + opname_len = plmn->desc_len; if (opname_len > OFONO_MAX_OPERATOR_NAME_LENGTH) opname_len = OFONO_MAX_OPERATOR_NAME_LENGTH; @@ -311,11 +319,17 @@ static void scan_nets_cb(struct qmi_result *result, void *user_data) for (i = 0; i < num; i++) { const struct qmi_nas_network_info *netinfo = ptr + offset; + uint16_t mcc = GUINT16_FROM_LE(netinfo->mcc); + uint16_t mnc = GUINT16_FROM_LE(netinfo->mnc); + + if (mcc > 999) + mcc = 999; + + if (mnc > 999) + mnc = 999; - snprintf(list[i].mcc, OFONO_MAX_MCC_LENGTH + 1, "%03d", - GUINT16_FROM_LE(netinfo->mcc)); - snprintf(list[i].mnc, OFONO_MAX_MNC_LENGTH + 1, "%02d", - GUINT16_FROM_LE(netinfo->mnc)); + snprintf(list[i].mcc, OFONO_MAX_MCC_LENGTH + 1, "%03d", mcc); + snprintf(list[i].mnc, OFONO_MAX_MNC_LENGTH + 1, "%03d", mnc); strncpy(list[i].name, netinfo->desc, netinfo->desc_len); list[i].name[netinfo->desc_len] = '\0'; |