Merge change 2302 into donut
* changes: added SmsMessage ConcatRef parsing validation
This commit is contained in:
@@ -111,7 +111,10 @@ public class SmsHeader {
|
|||||||
/**
|
/**
|
||||||
* NOTE: as defined in the spec, ConcatRef and PortAddr
|
* NOTE: as defined in the spec, ConcatRef and PortAddr
|
||||||
* fields should not reoccur, but if they do the last
|
* 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 id = inStream.read();
|
||||||
int length = inStream.read();
|
int length = inStream.read();
|
||||||
@@ -124,7 +127,10 @@ public class SmsHeader {
|
|||||||
concatRef.msgCount = inStream.read();
|
concatRef.msgCount = inStream.read();
|
||||||
concatRef.seqNumber = inStream.read();
|
concatRef.seqNumber = inStream.read();
|
||||||
concatRef.isEightBits = true;
|
concatRef.isEightBits = true;
|
||||||
|
if (concatRef.msgCount != 0 && concatRef.seqNumber != 0 &&
|
||||||
|
concatRef.seqNumber <= concatRef.msgCount) {
|
||||||
smsHeader.concatRef = concatRef;
|
smsHeader.concatRef = concatRef;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ELT_ID_CONCATENATED_16_BIT_REFERENCE:
|
case ELT_ID_CONCATENATED_16_BIT_REFERENCE:
|
||||||
concatRef = new ConcatRef();
|
concatRef = new ConcatRef();
|
||||||
@@ -132,7 +138,10 @@ public class SmsHeader {
|
|||||||
concatRef.msgCount = inStream.read();
|
concatRef.msgCount = inStream.read();
|
||||||
concatRef.seqNumber = inStream.read();
|
concatRef.seqNumber = inStream.read();
|
||||||
concatRef.isEightBits = false;
|
concatRef.isEightBits = false;
|
||||||
|
if (concatRef.msgCount != 0 && concatRef.seqNumber != 0 &&
|
||||||
|
concatRef.seqNumber <= concatRef.msgCount) {
|
||||||
smsHeader.concatRef = concatRef;
|
smsHeader.concatRef = concatRef;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ELT_ID_APPLICATION_PORT_ADDRESSING_8_BIT:
|
case ELT_ID_APPLICATION_PORT_ADDRESSING_8_BIT:
|
||||||
portAddrs = new PortAddrs();
|
portAddrs = new PortAddrs();
|
||||||
|
|||||||
@@ -168,6 +168,43 @@ public class CdmaSmsTest extends AndroidTestCase {
|
|||||||
assertEquals(decodedHeader.portAddrs, null);
|
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
|
@SmallTest
|
||||||
public void testUserDataHeaderMixedFeedback() throws Exception {
|
public void testUserDataHeaderMixedFeedback() throws Exception {
|
||||||
BearerData bearerData = new BearerData();
|
BearerData bearerData = new BearerData();
|
||||||
|
|||||||
Reference in New Issue
Block a user