Closed
Description
Unlike C-style strings, std::string
s can contain the null
character. For example std::string("hello\0world")
.
However, in BLERemoteCharacteristic.cpp, the std::string newValue
is converted to a C-style string before being sent to writeValue. This means that any characters after a null character in newValue
will not be sent to writeValue
. For example, std::string("hello\0world")
will be converted into the C-style/null-terminated string "hello\0"
.
A fix would be to use the data()
method on std::string
and, more importantly, the length()
method on std::string
. newValue.length()
will give the total length of the string (including any null characters), however strlen
will only return the length up to the first null character.
void BLERemoteCharacteristic::writeValue(std::string newValue, bool response) {
writeValue((uint8_t*)newValue.data(), newValue.length(), response);
} // writeValue
Metadata
Metadata
Assignees
Labels
No labels