Don't call property_get with too small buffer
It's an error to call property_get with too small of a buffer.
Pass a large enough buffer, and do checks to make sure the returned
value isn't too big.
In function 'property_get',
inlined from 'readBDAddr' at device/lge/mako/bdAddrLoader/addrloader.c:156:32:
system/core/include/cutils/properties.h:64:39: error: call to '__property_get_too_small_error' declared with attribute error: property_get() called with too small of a buffer
In function 'property_get',
inlined from 'readBDAddr' at device/lge/mako/bdAddrLoader/addrloader.c:162:32:
system/core/include/cutils/properties.h:64:39: error: call to '__property_get_too_small_error' declared with attribute error: property_get() called with too small of a buffer
Change-Id: Iddca5625b1ad1e224f8aea87d58e0d63dad54ed5
diff --git a/bdAddrLoader/addrloader.c b/bdAddrLoader/addrloader.c
index 5c273f9..98f12a7 100644
--- a/bdAddrLoader/addrloader.c
+++ b/bdAddrLoader/addrloader.c
@@ -151,15 +151,18 @@
return FAIL;
}
}else if(inArg.nPathType == ARG_TYPE_PATH_PROP){
+ char prop_value[PROPERTY_VALUE_MAX];
switch(inArg.nDataType){
case ARG_TYPE_DATA_HEX:
- if(property_get(inArg.szSrc, (char *)loadedBDAddr->data.bin, "")>=0){
+ if(property_get(inArg.szSrc, prop_value, "") >= 0 && strlen(prop_value) < BD_ADDR_LEN){
+ strlcpy((char *)loadedBDAddr->data.bin, prop_value, BD_ADDR_LEN);
loadedBDAddr->nDataType = ARG_TYPE_DATA_HEX;
return SUCCESS;
}
break;
case ARG_TYPE_DATA_ASCII:
- if(property_get(inArg.szSrc, loadedBDAddr->data.sz, "")>=0){
+ if(property_get(inArg.szSrc, prop_value, "") >= 0 && strlen(prop_value) < BD_ADDR_STR_LEN){
+ strlcpy(loadedBDAddr->data.sz, prop_value, BD_ADDR_STR_LEN);
loadedBDAddr->nDataType = ARG_TYPE_DATA_ASCII;
return SUCCESS;
}