Index: src/OFLHAArchive.m ================================================================== --- src/OFLHAArchive.m +++ src/OFLHAArchive.m @@ -43,11 +43,11 @@ OF_KINDOF(OFStream *) _stream; OF_KINDOF(OFStream *) _decompressedStream; OFLHAArchiveEntry *_entry; uint32_t _toRead, _bytesConsumed; uint16_t _CRC16; - bool _atEndOfStream; + bool _atEndOfStream, _skipped; } - (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream entry: (OFLHAArchiveEntry *)entry; - (void)of_skip; @@ -369,11 +369,11 @@ - (void)of_skip { OF_KINDOF(OFStream *) stream; uint32_t toRead; - if (_stream == nil || _toRead == 0) + if (_stream == nil || _skipped) return; stream = _stream; toRead = _toRead; @@ -407,10 +407,11 @@ length: min]; } } _toRead = 0; + _skipped = true; } - (void)close { [self of_skip]; Index: src/OFTarArchive.m ================================================================== --- src/OFTarArchive.m +++ src/OFTarArchive.m @@ -37,11 +37,11 @@ @interface OFTarArchive_FileReadStream: OFStream { OFTarArchiveEntry *_entry; OF_KINDOF(OFStream *) _stream; uint64_t _toRead; - bool _atEndOfStream; + bool _atEndOfStream, _skipped; } - (instancetype)of_initWithStream: (OFStream *)stream entry: (OFTarArchiveEntry *)entry; - (void)of_skip; @@ -359,11 +359,11 @@ [super close]; } - (void)of_skip { - if (_stream == nil || _toRead == 0) + if (_stream == nil || _skipped) return; if ([_stream isKindOfClass: [OFSeekableStream class]] && _toRead <= INT64_MAX && (of_offset_t)_toRead == (int64_t)_toRead) { uint64_t size; @@ -398,10 +398,12 @@ if (size % 512 != 0) [_stream readIntoBuffer: buffer exactLength: (size_t)(512 - (size % 512))]; } + + _skipped = true; } @end @implementation OFTarArchive_FileWriteStream - (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream Index: src/OFTarArchiveEntry.m ================================================================== --- src/OFTarArchiveEntry.m +++ src/OFTarArchiveEntry.m @@ -267,12 +267,12 @@ { void *pool = objc_autoreleasePoolPush(); OFString *ret = [OFString stringWithFormat: @"<%@:\n" @"\tFile name = %@\n" @"\tMode = %06o\n" - @"\tUID = %u\n", - @"\tGID = %u\n", + @"\tUID = %u\n" + @"\tGID = %u\n" @"\tSize = %" PRIu64 @"\n" @"\tModification date = %@\n" @"\tType = %u\n" @"\tTarget file name = %@\n" @"\tOwner = %@\n"