Fix missing data when reading large values.

The wrong length value was being used to set the values read from peer attributes.
This has been corrected to use the proper value size.
This commit is contained in:
h2zero 2021-12-29 14:01:37 -07:00
parent 7a82067177
commit f2ade345f4
2 changed files with 8 additions and 6 deletions

View file

@ -547,11 +547,12 @@ int NimBLERemoteCharacteristic::onReadCB(uint16_t conn_handle,
if(rc == 0) {
if(attr) {
if(((*strBuf).length() + attr->om->om_len) > BLE_ATT_ATTR_MAX_LEN) {
uint32_t data_len = OS_MBUF_PKTLEN(attr->om);
if(((*strBuf).length() + data_len) > BLE_ATT_ATTR_MAX_LEN) {
rc = BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
} else {
NIMBLE_LOGD(LOG_TAG, "Got %d bytes", attr->om->om_len);
(*strBuf) += std::string((char*) attr->om->om_data, attr->om->om_len);
NIMBLE_LOGD(LOG_TAG, "Got %d bytes", data_len);
(*strBuf) += std::string((char*) attr->om->om_data, data_len);
return 0;
}
}

View file

@ -202,11 +202,12 @@ int NimBLERemoteDescriptor::onReadCB(uint16_t conn_handle,
if(rc == 0) {
if(attr) {
if(((*strBuf).length() + attr->om->om_len) > BLE_ATT_ATTR_MAX_LEN) {
uint32_t data_len = OS_MBUF_PKTLEN(attr->om);
if(((*strBuf).length() + data_len) > BLE_ATT_ATTR_MAX_LEN) {
rc = BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
} else {
NIMBLE_LOGD(LOG_TAG, "Got %d bytes", attr->om->om_len);
(*strBuf) += std::string((char*) attr->om->om_data, attr->om->om_len);
NIMBLE_LOGD(LOG_TAG, "Got %d bytes", data_len);
(*strBuf) += std::string((char*) attr->om->om_data, data_len);
return 0;
}
}