Skip to content

BLERemoteCharacteristic writeValue fails to write std::strings containing null character '\0' #4472

Closed
@snosrap

Description

@snosrap

Unlike C-style strings, std::strings 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".

writeValue((uint8_t*)newValue.c_str(), strlen(newValue.c_str()), response);

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions