Index: src/OFZooArchive.m ================================================================== --- src/OFZooArchive.m +++ src/OFZooArchive.m @@ -256,12 +256,14 @@ if (_lastHeaderOffset == 0) return; offset = [_stream seekToOffset: 0 whence: OFSeekCurrent]; - if (offset < 0 || offset > UINT32_MAX || _lastHeaderLength < 56) + if (offset < 0 || (unsigned long long)offset > UINT32_MAX) @throw [OFOutOfRangeException exception]; + + OFEnsure(_lastHeaderLength >= 56); [_stream seekToOffset: _lastHeaderOffset whence: OFSeekSet]; buffer = OFAllocMemory(1, _lastHeaderLength); @try { uint16_t tmp16; @@ -597,11 +599,11 @@ _entry.compressedSize = _bytesWritten; _entry.CRC16 = _CRC16; offset = [_stream seekToOffset: 0 whence: OFSeekCurrent]; - if (offset > UINT32_MAX) + if ((unsigned long long)offset > UINT32_MAX) @throw [OFOutOfRangeException exception]; [_stream seekToOffset: *_lastHeaderOffset whence: OFSeekSet]; _entry->_dataOffset = (uint32_t)offset;