From 38799f5cfb8c45930f3dc8c1c08adfc904fa02af Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Thu, 28 Aug 2025 15:58:28 -0700 Subject: [PATCH] Also check EOF in getBuffer() --- data.cpp | 16 ++++++++++------ data.h | 6 +++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/data.cpp b/data.cpp index 9509a29..2b560a7 100644 --- a/data.cpp +++ b/data.cpp @@ -60,9 +60,12 @@ int PycFile::getByte() return ch; } -int PycFile::getBuffer(int bytes, void* buffer) +void PycFile::getBuffer(int bytes, void* buffer) { - return (int)fread(buffer, 1, bytes, m_stream); + if (fread(buffer, 1, bytes, m_stream) != (size_t)bytes) { + fputs("PycFile::getBuffer(): Unexpected end of stream\n", stderr); + std::exit(1); + } } @@ -78,14 +81,15 @@ int PycBuffer::getByte() return ch & 0xFF; // Make sure it's just a byte! } -int PycBuffer::getBuffer(int bytes, void* buffer) +void PycBuffer::getBuffer(int bytes, void* buffer) { - if (m_pos + bytes > m_size) - bytes = m_size - m_pos; + if (m_pos + bytes > m_size) { + fputs("PycBuffer::getBuffer(): Unexpected end of stream\n", stderr); + std::exit(1); + } if (bytes != 0) memcpy(buffer, (m_buffer + m_pos), bytes); m_pos += bytes; - return bytes; } int formatted_print(std::ostream& stream, const char* format, ...) diff --git a/data.h b/data.h index 376d318..28cc85e 100644 --- a/data.h +++ b/data.h @@ -19,7 +19,7 @@ public: virtual bool atEof() const = 0; virtual int getByte() = 0; - virtual int getBuffer(int bytes, void* buffer) = 0; + virtual void getBuffer(int bytes, void* buffer) = 0; int get16(); int get32(); Pyc_INT64 get64(); @@ -34,7 +34,7 @@ public: bool atEof() const override; int getByte() override; - int getBuffer(int bytes, void* buffer) override; + void getBuffer(int bytes, void* buffer) override; private: FILE* m_stream; @@ -50,7 +50,7 @@ public: bool atEof() const override { return (m_pos == m_size); } int getByte() override; - int getBuffer(int bytes, void* buffer) override; + void getBuffer(int bytes, void* buffer) override; private: const unsigned char* m_buffer;