summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2020-09-08 11:19:54 -0500
committerDenis Kenzior <denkenz@gmail.com>2020-09-08 11:19:54 -0500
commit52091a1af02fa7151c2bb6b542e51068ce20c525 (patch)
tree1ba0a62b5a1a3d1aa07b493de757f31785501d0e
parent23e1a56a47807e8db3e8a4571a47e4217d70d39d (diff)
downloadofono-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.c30
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';