msgpack-arduino icon indicating copy to clipboard operation
msgpack-arduino copied to clipboard

String length and allocation

Open Sod-Almighty opened this issue 5 years ago • 5 comments

When calling the readString functions, I have to magically know how big the string buffer needs to be. There appears to be no way to check this ahead of time.

I propose a variant of readString, thusly:

char* readNewString(Stream& stream, bool safely = true) {
 DataType dataFormat;
 getNextDataType(stream, dataFormat, safely);
 size_t outputSize;
 char* value = nullptr;
 switch(dataFormat) {
  case DataType::String5: {
   MSGPACK_SAFETY_FORMAT_CHECK(DataType::String8);
   stream.read();
   MSGPACK_SAFELY_RUN(readRaw(stream, outputSize, safely));
   value = new char[outputSize + 1];
   MSGPACK_SAFELY_RUN(readRaw(stream, value, outputSize, safely));
   value[outputSize] = '\0';
   return value;
  }
  /* ... */
 }
}

Sod-Almighty avatar Dec 01 '18 22:12 Sod-Almighty