summaryrefslogtreecommitdiffstats
path: root/src/gsm/gsm0480.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gsm/gsm0480.c')
-rw-r--r--src/gsm/gsm0480.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c
index e3856a56..0f302502 100644
--- a/src/gsm/gsm0480.c
+++ b/src/gsm/gsm0480.c
@@ -334,11 +334,15 @@ static int parse_ss_info_elements(const uint8_t *ss_ie, uint16_t len,
uint8_t iei;
uint8_t iei_length;
+ /* We need at least two bytes */
+ if (len < 2)
+ return 0;
+
iei = ss_ie[0];
iei_length = ss_ie[1];
/* If the data does not fit, report an error */
- if (len - 2 < iei_length)
+ if (iei_length + 2 > len)
return 0;
switch (iei) {
@@ -356,6 +360,11 @@ static int parse_ss_info_elements(const uint8_t *ss_ie, uint16_t len,
break;
}
+ /* A message may contain multiple IEs */
+ if (iei_length + 2 + 2 < len)
+ rc &= parse_ss_info_elements(ss_ie + iei_length + 2,
+ len - iei_length - 2, req);
+
return rc;
}