AI 150264: DO NOT MERGE TO DONUT.
Manual merge of https://android-git.corp.google.com/g/Gerrit#change,5804 from donut: Ensure that we never trigger ArrayIndexOutOfBoundsException by checking that the index is always < the array's length. Also ensures that the object's state is consistent. Should resolve a denial-of-service bug when handling malformed WAP pushes. Also add a try-catch around call to dispatchMessage(), in case there are other lurking bugs. (This is also already in Donut.) Automated import of CL 150264
This commit is contained in:
committed by
The Android Open Source Project
parent
5a3a63f8b4
commit
2e7e15f2da
@@ -187,22 +187,30 @@ public class WspTypeDecoder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode the "Extension-media" type for WSP pdu
|
||||
*
|
||||
* @param startIndex The starting position of the "Extension-media" in this pdu
|
||||
*
|
||||
* @return false when error(not a Extension-media) occur
|
||||
* return value can be retrieved by getValueString() method
|
||||
* length of data in pdu can be retrieved by getValue32() method
|
||||
*/
|
||||
* Decode the "Extension-media" type for WSP PDU.
|
||||
*
|
||||
* @param startIndex The starting position of the "Extension-media" in this PDU.
|
||||
*
|
||||
* @return false on error, such as if there is no Extension-media at startIndex.
|
||||
* Side-effects: updates stringValue (available with getValueString()), which will be
|
||||
* null on error. The length of the data in the PDU is available with getValue32(), 0
|
||||
* on error.
|
||||
*/
|
||||
public boolean decodeExtensionMedia(int startIndex) {
|
||||
int index = startIndex;
|
||||
while (wspData[index] != 0) {
|
||||
dataLength = 0;
|
||||
stringValue = null;
|
||||
int length = wspData.length;
|
||||
boolean rtrn = index < length;
|
||||
|
||||
while (index < length && wspData[index] != 0) {
|
||||
index++;
|
||||
}
|
||||
|
||||
dataLength = index - startIndex + 1;
|
||||
stringValue = new String(wspData, startIndex, dataLength - 1);
|
||||
return true;
|
||||
|
||||
return rtrn;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -254,7 +254,11 @@ final class SMSDispatcher extends Handler {
|
||||
}
|
||||
|
||||
sms = (SmsMessage) ar.result;
|
||||
dispatchMessage(sms);
|
||||
try {
|
||||
dispatchMessage(sms);
|
||||
} catch (RuntimeException ex) {
|
||||
Log.e(TAG, "Exception processing incoming SMS. Exception:" + ex);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user