summaryrefslogtreecommitdiffstats
path: root/src/smsutil.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-11-02 10:48:44 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-11-02 12:15:53 -0500
commita05ebc93aba9cbc4cd200b4f0a93920cc00c8d5b (patch)
treeafeb36d5de27716f35ae588a0365f277ed27ede4 /src/smsutil.c
parent9d52fd0da09a1325cf6258e8c76c5373c2a47063 (diff)
downloadofono-a05ebc93aba9cbc4cd200b4f0a93920cc00c8d5b.tar.bz2
smsutil: Additional sanity checks for decode_scts
Diffstat (limited to 'src/smsutil.c')
-rw-r--r--src/smsutil.c21
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;
}