void Gunzip::ProcessPoststreamTail() { SecByteBlock crc(4); if (m_inQueue.Get(crc, 4) != 4) throw TailErr(); if (!m_crc.Verify(crc)) throw CrcErr(); word32 lengthCheck; if (m_inQueue.GetWord32(lengthCheck, LITTLE_ENDIAN_ORDER) != 4) throw TailErr(); if (lengthCheck != m_length) throw LengthErr(); }
void Gunzip::ProcessTail() { assert(tailLen == 8); word32 calculatedCrc = crc.GetCrc(); if ((((word32)tail[0]) | ((word32)tail[1] << 8) | ((word32)tail[2] << 16) | ((word32)tail[3] << 24)) != calculatedCrc) throw CrcErr(); if ((((word32)tail[4]) | ((word32)tail[5] << 8) | ((word32)tail[6] << 16) | ((word32)tail[7] << 24)) != totalLen) throw LengthErr(); tailLen = 9; // signal TailProcesser to bypass everything from now on }