diff --git a/NetDb.cpp b/NetDb.cpp index 846f4b3c..2c9c4395 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -556,8 +556,13 @@ namespace data } uint8_t uncompressed[2048]; size_t uncompressedSize = m_Inflator.Inflate (buf + offset, size, uncompressed, 2048); - if (uncompressedSize) + if (uncompressedSize && uncompressedSize < 2048) updated = AddRouterInfo (ident, uncompressed, uncompressedSize); + else + { + LogPrint (eLogError, "NetDb: decompression failed ", uncompressedSize); + return; + } } if (replyToken && context.IsFloodfill () && updated) diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 130355b8..2aefab31 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -125,7 +125,8 @@ namespace data m_IsUnreachable = true; return; } - std::stringstream str (std::string ((char *)m_Buffer + identityLen, m_BufferLen - identityLen)); + std::stringstream str; + str.write ((const char *)m_Buffer + identityLen, m_BufferLen - identityLen); ReadFromStream (str); if (!str) {