diff options
author | Greg Schlomoff <gregschlom@google.com> | 2021-10-07 10:53:28 -0700 |
---|---|---|
committer | Greg Schlomoff <gregschlom@google.com> | 2021-10-07 14:47:01 -0700 |
commit | c947a35004b50add6d3f7387e9906a47bda91eaa (patch) | |
tree | c413b2db4f74bac83ff3d6b18c2d5223f700ca49 /stream-servers/ReadBuffer.cpp | |
parent | e29327081d9d1a2618c2f7beff06cf80ea91b3b9 (diff) | |
download | vulkan-cereal-c947a35004b50add6d3f7387e9906a47bda91eaa.tar.gz |
gfxstream: make sure we consistently use uint32_t instead of int32_t to read the packet size.
A negative packet size doesn't make sense, and the code currently doesn't try to handle that scenario (ie: all 4 stream decoders do `ptr += packetLen` and as such would move backwards if the length was negative.
Further, on the encoder side, uint32_t is used (e.g.:
http://cs/android/device/generic/goldfish-opengl/system/vulkan_enc/VkEncoder.cpp;l=122;rcl=b0df973dd65f81645707f65a12e8a196a5310ef2)
Test: compiles, runs
Change-Id: Iaa0ac3fe57a3c20b419ceebe80d3b8ccec4083d7
Diffstat (limited to 'stream-servers/ReadBuffer.cpp')
-rw-r--r-- | stream-servers/ReadBuffer.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/stream-servers/ReadBuffer.cpp b/stream-servers/ReadBuffer.cpp index 8bc52379..a108ccae 100644 --- a/stream-servers/ReadBuffer.cpp +++ b/stream-servers/ReadBuffer.cpp @@ -36,21 +36,21 @@ ReadBuffer::~ReadBuffer() { free(m_buf); } -void ReadBuffer::setNeededFreeTailSize(int size) { +void ReadBuffer::setNeededFreeTailSize(size_t size) { m_neededFreeTailSize = size; } -int ReadBuffer::getData(IOStream* stream, int minSize) { +int ReadBuffer::getData(IOStream* stream, size_t minSize) { assert(stream); - assert(minSize > (int)m_validData); + assert(minSize > m_validData); - const int minSizeToRead = minSize - m_validData; - const int neededFreeTailThisTime = + const size_t minSizeToRead = minSize - m_validData; + const size_t neededFreeTailThisTime = std::max(minSizeToRead, m_neededFreeTailSize); - int maxSizeToRead; - const int freeTailSize = m_buf + m_size - (m_readPtr + m_validData); + size_t maxSizeToRead; + const size_t freeTailSize = m_buf + m_size - (m_readPtr + m_validData); if (freeTailSize >= neededFreeTailThisTime) { maxSizeToRead = freeTailSize; } else { @@ -63,10 +63,8 @@ int ReadBuffer::getData(IOStream* stream, int minSize) { // Note: make sure we can fit at least two of the requested packets // into the new buffer to minimize the reallocations and // memmove()-ing stuff around. - size_t new_size = std::max<size_t>( - 2 * minSizeToRead + m_validData, - 2 * m_size); - if (new_size < m_size) { // overflow check + size_t new_size = std::max(2 * minSizeToRead + m_validData, 2 * m_size); + if (new_size < m_size) { // overflow check new_size = INT_MAX; } |