in common/binaryserializer.h [73:121]
static void deserializeBuffer(
const char* buffer,
const size_t size,
std::vector<swss::FieldValueTuple>& values)
{
WARNINGS_NO_CAST_ALIGN;
auto pkvp_count = (const size_t*)buffer;
WARNINGS_RESET;
size_t kvp_count = *pkvp_count;
auto tmp_buffer = buffer + sizeof(size_t);
while (kvp_count > 0)
{
kvp_count--;
// read key and value from buffer
WARNINGS_NO_CAST_ALIGN;
auto pkeylen = (const size_t*)tmp_buffer;
WARNINGS_RESET;
tmp_buffer += sizeof(size_t);
if ((size_t)(tmp_buffer - buffer + *pkeylen) > size)
{
SWSS_LOG_THROW("serialized key data was truncated, key length: %zu, increase buffer size: %zu",
*pkeylen,
size);
}
auto pkey = string(tmp_buffer, *pkeylen);
tmp_buffer += *pkeylen;
WARNINGS_NO_CAST_ALIGN;
auto pvallen = (const size_t*)tmp_buffer;
WARNINGS_RESET;
tmp_buffer += sizeof(size_t);
if ((size_t)(tmp_buffer - buffer + *pvallen) > size)
{
SWSS_LOG_THROW("serialized value data was truncated,, value length: %zu increase buffer size: %zu",
*pvallen,
size);
}
auto pval = string(tmp_buffer, *pvallen);
tmp_buffer += *pvallen;
values.push_back(std::make_pair(pkey, pval));
}
}