@@ -248,12 +248,13 @@ _inflateStream = nil; _state++; break; case OFGZIPStreamStateCRC32: - _bytesRead += [_stream readIntoBuffer: _buffer - length: 4 - _bytesRead]; + _bytesRead += [_stream + readIntoBuffer: _buffer + _bytesRead + length: 4 - _bytesRead]; if (_bytesRead < 4) return 0; CRC32 = ((uint32_t)_buffer[3] << 24) | @@ -272,14 +273,18 @@ _bytesRead = 0; _CRC32 = ~0; _state++; break; case OFGZIPStreamStateUncompressedSize: - _bytesRead += [_stream readIntoBuffer: _buffer - length: 4 - _bytesRead]; + _bytesRead += [_stream + readIntoBuffer: _buffer + _bytesRead + length: 4 - _bytesRead]; + + if (_bytesRead < 4) + return 0; - uncompressedSize = ((uint32_t)_buffer[3] << 24) | + uncompressedSize = (_buffer[3] << 24) | (_buffer[2] << 16) | (_buffer[1] << 8) | _buffer[0]; if (_uncompressedSize != uncompressedSize) { OFString *actual = [OFString stringWithFormat: @"%" PRIu32, _uncompressedSize]; OFString *expected = [OFString stringWithFormat: