diff --git a/src/binary_reader.c b/src/binary_reader.c index a18ba179..9f4bfc06 100644 --- a/src/binary_reader.c +++ b/src/binary_reader.c @@ -25,7 +25,7 @@ void BinaryReader_clearBuffer(BinaryReader* reader) { static void readCheck(BinaryReader* reader, void* dest, size_t bytes) { if (reader->buffer != nullptr) { - if (reader->bufferPos + bytes > reader->bufferSize) { + if (reader->bufferPos > reader->bufferSize || bytes > reader->bufferSize - reader->bufferPos) { size_t absPos = reader->bufferBase + reader->bufferPos; fprintf(stderr, "BinaryReader: buffer read error at position 0x%zX (requested %zu bytes, buffer has %zu remaining)\n", absPos, bytes, reader->bufferSize - reader->bufferPos); abort(); @@ -106,7 +106,7 @@ uint8_t* BinaryReader_readBytesAt(BinaryReader* reader, size_t offset, size_t co uint8_t* buf = safeMalloc(count); if (reader->buffer != nullptr) { - if (offset < reader->bufferBase || offset + count > reader->bufferBase + reader->bufferSize) { + if (offset < reader->bufferBase || (offset - reader->bufferBase) > reader->bufferSize || count > reader->bufferSize - (offset - reader->bufferBase)) { fprintf(stderr, "BinaryReader: readBytesAt offset 0x%zX+%zu out of buffer range [0x%zX, 0x%zX)\n", offset, count, reader->bufferBase, reader->bufferBase + reader->bufferSize); abort(); }