From dc45be045b6af8ed90c7f128b99a4d92ca4ea448 Mon Sep 17 00:00:00 2001 From: Gene Payne Date: Mon, 12 Aug 2019 13:25:56 -0600 Subject: [PATCH] =?UTF-8?q?Added=20a=20check=20to=20prevent=20buffer=20syn?= =?UTF-8?q?c=20buffer=20overflow,=20and=20expand=20buff=E2=80=A6=20(#937)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added a check to prevent buffer sync buffer overflow, and expand buffer size if needed. * Removed unnecessary asserts and added sync buffer overflow check to encode template --- include/openspace/util/syncbuffer.inl | 6 +++++- src/util/syncbuffer.cpp | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/openspace/util/syncbuffer.inl b/include/openspace/util/syncbuffer.inl index 0ea2ab3d61..99860e7bdc 100644 --- a/include/openspace/util/syncbuffer.inl +++ b/include/openspace/util/syncbuffer.inl @@ -30,7 +30,11 @@ namespace openspace { template void SyncBuffer::encode(const T& v) { const size_t size = sizeof(T); - ghoul_assert(_encodeOffset + size < _n, ""); + + size_t anticpatedBufferSize = _encodeOffset + size; + if (anticpatedBufferSize >= _n) { + _dataStream.resize(anticpatedBufferSize); + } memcpy(_dataStream.data() + _encodeOffset, &v, size); _encodeOffset += size; diff --git a/src/util/syncbuffer.cpp b/src/util/syncbuffer.cpp index f89204c542..b74446c3d0 100644 --- a/src/util/syncbuffer.cpp +++ b/src/util/syncbuffer.cpp @@ -35,9 +35,13 @@ SyncBuffer::SyncBuffer(size_t n) SyncBuffer::~SyncBuffer() {} // NOLINT void SyncBuffer::encode(const std::string& s) { - ghoul_assert(_encodeOffset + sizeof(char) * s.size() + sizeof(int32_t) < _n, ""); + int32_t anticpatedBufferSize = _encodeOffset + (sizeof(char) * s.size()) + + sizeof(int32_t); + if (anticpatedBufferSize >= _n) { + _dataStream.resize(anticpatedBufferSize); + } - int32_t length = static_cast(s.length()); + int32_t length = static_cast(s.size() * sizeof(char)); memcpy( _dataStream.data() + _encodeOffset, reinterpret_cast(&length),