diff options
author | lrichard <richardl@codeaurora.org> | 2013-10-29 14:55:30 +0800 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2014-11-27 00:39:32 -0800 |
commit | 66c5ce01976c50084a1c4c5e6c90cb13fbcbe445 (patch) | |
tree | a04aea967f603ae3d84ffe7bfe03a46f0febcd20 | |
parent | c86c10bbcd5729232c25e828b37c129635cfbd58 (diff) | |
download | android_hardware_ril-66c5ce01976c50084a1c4c5e6c90cb13fbcbe445.tar.gz android_hardware_ril-66c5ce01976c50084a1c4c5e6c90cb13fbcbe445.tar.bz2 android_hardware_ril-66c5ce01976c50084a1c4c5e6c90cb13fbcbe445.zip |
Add support for cdma dynamic address length.
Get the address,sub address,Bearer with dynamic length in the data parcel,
to avoid the OutOfBoundsException with the MAX macro.
Change-Id: I1d7437143c1369d77791136b68e06088acd72937
CRs-Fixed:543087
-rwxr-xr-x | libril/ril.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libril/ril.cpp b/libril/ril.cpp index 8ffe2b3..217cb6a 100755 --- a/libril/ril.cpp +++ b/libril/ril.cpp @@ -1494,6 +1494,7 @@ static void dispatchRilCdmaSmsWriteArgs(Parcel &p, RequestInfo *pRI) { uint8_t uct; status_t status; int32_t digitCount; + int32_t digitLimit; memset(&rcsw, 0, sizeof(rcsw)); @@ -1524,7 +1525,9 @@ static void dispatchRilCdmaSmsWriteArgs(Parcel &p, RequestInfo *pRI) { status = p.read(&uct,sizeof(uct)); rcsw.message.sAddress.number_of_digits = (uint8_t) uct; - for(digitCount = 0 ; digitCount < RIL_CDMA_SMS_ADDRESS_MAX; digitCount ++) { + digitLimit = MIN((rcsw.message.sAddress.number_of_digits), RIL_CDMA_SMS_ADDRESS_MAX); + + for(digitCount = 0 ; digitCount < digitLimit; digitCount ++) { status = p.read(&uct,sizeof(uct)); rcsw.message.sAddress.digits[digitCount] = (uint8_t) uct; } @@ -1538,7 +1541,9 @@ static void dispatchRilCdmaSmsWriteArgs(Parcel &p, RequestInfo *pRI) { status = p.read(&uct,sizeof(uct)); rcsw.message.sSubAddress.number_of_digits = (uint8_t) uct; - for(digitCount = 0 ; digitCount < RIL_CDMA_SMS_SUBADDRESS_MAX; digitCount ++) { + digitLimit = MIN((rcsw.message.sSubAddress.number_of_digits), RIL_CDMA_SMS_SUBADDRESS_MAX); + + for(digitCount = 0 ; digitCount < digitLimit; digitCount ++) { status = p.read(&uct,sizeof(uct)); rcsw.message.sSubAddress.digits[digitCount] = (uint8_t) uct; } @@ -1546,7 +1551,9 @@ static void dispatchRilCdmaSmsWriteArgs(Parcel &p, RequestInfo *pRI) { status = p.readInt32(&t); rcsw.message.uBearerDataLen = (int) t; - for(digitCount = 0 ; digitCount < RIL_CDMA_SMS_BEARER_DATA_MAX; digitCount ++) { + digitLimit = MIN((rcsw.message.uBearerDataLen), RIL_CDMA_SMS_BEARER_DATA_MAX); + + for(digitCount = 0 ; digitCount < digitLimit; digitCount ++) { status = p.read(&uct, sizeof(uct)); rcsw.message.aBearerData[digitCount] = (uint8_t) uct; } |