diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-11-02 10:48:44 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-11-02 12:15:53 -0500 |
commit | a05ebc93aba9cbc4cd200b4f0a93920cc00c8d5b (patch) | |
tree | afeb36d5de27716f35ae588a0365f277ed27ede4 /src/smsutil.c | |
parent | 9d52fd0da09a1325cf6258e8c76c5373c2a47063 (diff) | |
download | ofono-a05ebc93aba9cbc4cd200b4f0a93920cc00c8d5b.tar.bz2 |
smsutil: Additional sanity checks for decode_scts
Diffstat (limited to 'src/smsutil.c')
-rw-r--r-- | src/smsutil.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/smsutil.c b/src/smsutil.c index 04bdb0e0..bc4f13c9 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -379,21 +379,39 @@ gboolean sms_decode_scts(const unsigned char *pdu, int len, next_octet(pdu, len, offset, &oct); out->year = sms_decode_semi_octet(oct); + if (out->year > 99) + return FALSE; + next_octet(pdu, len, offset, &oct); out->month = sms_decode_semi_octet(oct); + if (out->month > 12) + return FALSE; + next_octet(pdu, len, offset, &oct); out->day = sms_decode_semi_octet(oct); + if (out->day > 31) + return FALSE; + next_octet(pdu, len, offset, &oct); out->hour = sms_decode_semi_octet(oct); + if (out->hour > 23) + return FALSE; + next_octet(pdu, len, offset, &oct); out->minute = sms_decode_semi_octet(oct); + if (out->minute > 59) + return FALSE; + next_octet(pdu, len, offset, &oct); out->second = sms_decode_semi_octet(oct); + if (out->second > 59) + return FALSE; + next_octet(pdu, len, offset, &oct); /* @@ -408,6 +426,9 @@ gboolean sms_decode_scts(const unsigned char *pdu, int len, if (oct & 0x08) out->timezone = out->timezone * -1; + if ((out->timezone > 12*4-1) || (out->timezone < -(12*4-1))) + return FALSE; + return TRUE; } |