Index: src/OFLHAArchive.m ================================================================== --- src/OFLHAArchive.m +++ src/OFLHAArchive.m @@ -482,11 +482,11 @@ @throw [OFOutOfRangeException exception]; @try { [_stream writeBuffer: buffer length: length]; } @catch (OFWriteFailedException *e) { - OFEnsure(e.bytesWritten < length); + OFEnsure(e.bytesWritten <= length); _bytesWritten += (uint32_t)e.bytesWritten; _CRC16 = OFCRC16(_CRC16, buffer, e.bytesWritten); if (e.errNo == EWOULDBLOCK) Index: src/OFStream.m ================================================================== --- src/OFStream.m +++ src/OFStream.m @@ -1073,11 +1073,11 @@ OFFreeMemory(_writeBuffer); _writeBuffer = NULL; _writeBufferLength = 0; } - OFEnsure(bytesWritten < _writeBufferLength); + OFEnsure(bytesWritten <= _writeBufferLength); memmove(_writeBuffer, _writeBuffer + bytesWritten, _writeBufferLength - bytesWritten); _writeBufferLength -= bytesWritten; @try { Index: src/OFTarArchive.m ================================================================== --- src/OFTarArchive.m +++ src/OFTarArchive.m @@ -438,10 +438,12 @@ @throw [OFOutOfRangeException exception]; @try { [_stream writeBuffer: buffer length: length]; } @catch (OFWriteFailedException *e) { + OFEnsure(e.bytesWritten <= length); + _toWrite -= e.bytesWritten; if (e.errNo == EWOULDBLOCK) return e.bytesWritten; Index: src/OFZIPArchive.m ================================================================== --- src/OFZIPArchive.m +++ src/OFZIPArchive.m @@ -886,11 +886,11 @@ @throw [OFOutOfRangeException exception]; @try { [_stream writeBuffer: buffer length: length]; } @catch (OFWriteFailedException *e) { - OFEnsure(e.bytesWritten < length); + OFEnsure(e.bytesWritten <= length); _bytesWritten += (int64_t)e.bytesWritten; _CRC32 = OFCRC32(_CRC32, buffer, e.bytesWritten); if (e.errNo == EWOULDBLOCK)