Merge change 2302 into donut

* changes:
  added SmsMessage ConcatRef parsing validation
This commit is contained in:
Android (Google) Code Review
2009-05-25 23:23:18 -07:00
2 changed files with 49 additions and 3 deletions

View File

@@ -111,7 +111,10 @@ public class SmsHeader {
/**
* NOTE: as defined in the spec, ConcatRef and PortAddr
* fields should not reoccur, but if they do the last
* occurrence is to be used.
* occurrence is to be used. Also, for ConcatRef
* elements, if the count is zero, sequence is zero, or
* sequence is larger than count, the entire element is to
* be ignored.
*/
int id = inStream.read();
int length = inStream.read();
@@ -124,7 +127,10 @@ public class SmsHeader {
concatRef.msgCount = inStream.read();
concatRef.seqNumber = inStream.read();
concatRef.isEightBits = true;
smsHeader.concatRef = concatRef;
if (concatRef.msgCount != 0 && concatRef.seqNumber != 0 &&
concatRef.seqNumber <= concatRef.msgCount) {
smsHeader.concatRef = concatRef;
}
break;
case ELT_ID_CONCATENATED_16_BIT_REFERENCE:
concatRef = new ConcatRef();
@@ -132,7 +138,10 @@ public class SmsHeader {
concatRef.msgCount = inStream.read();
concatRef.seqNumber = inStream.read();
concatRef.isEightBits = false;
smsHeader.concatRef = concatRef;
if (concatRef.msgCount != 0 && concatRef.seqNumber != 0 &&
concatRef.seqNumber <= concatRef.msgCount) {
smsHeader.concatRef = concatRef;
}
break;
case ELT_ID_APPLICATION_PORT_ADDRESSING_8_BIT:
portAddrs = new PortAddrs();

View File

@@ -168,6 +168,43 @@ public class CdmaSmsTest extends AndroidTestCase {
assertEquals(decodedHeader.portAddrs, null);
}
@SmallTest
public void testUserDataHeaderIllegalConcatRef() throws Exception {
BearerData bearerData = new BearerData();
bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
bearerData.messageId = 55;
SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
concatRef.refNumber = 0x10;
concatRef.msgCount = 0;
concatRef.seqNumber = 2;
concatRef.isEightBits = true;
SmsHeader smsHeader = new SmsHeader();
smsHeader.concatRef = concatRef;
byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader);
assertEquals(decodedHeader.concatRef, null);
concatRef.isEightBits = false;
encodedHeader = SmsHeader.toByteArray(smsHeader);
decodedHeader = SmsHeader.fromByteArray(encodedHeader);
assertEquals(decodedHeader.concatRef, null);
concatRef.msgCount = 1;
concatRef.seqNumber = 2;
encodedHeader = SmsHeader.toByteArray(smsHeader);
decodedHeader = SmsHeader.fromByteArray(encodedHeader);
assertEquals(decodedHeader.concatRef, null);
concatRef.msgCount = 1;
concatRef.seqNumber = 0;
encodedHeader = SmsHeader.toByteArray(smsHeader);
decodedHeader = SmsHeader.fromByteArray(encodedHeader);
assertEquals(decodedHeader.concatRef, null);
concatRef.msgCount = 2;
concatRef.seqNumber = 1;
encodedHeader = SmsHeader.toByteArray(smsHeader);
decodedHeader = SmsHeader.fromByteArray(encodedHeader);
assertEquals(decodedHeader.concatRef.msgCount, 2);
assertEquals(decodedHeader.concatRef.seqNumber, 1);
}
@SmallTest
public void testUserDataHeaderMixedFeedback() throws Exception {
BearerData bearerData = new BearerData();