Kaydet (Commit) 3e7ab1ac authored tarafından Matúš Kukan's avatar Matúš Kukan

ZipOutputEntry: m_pCurrentEntry is always set

Change-Id: Ib6a69a83f4a378df838b2231b9eba7fba49cd9f1
üst 4d1cb2dc
...@@ -64,62 +64,55 @@ ZipOutputEntry::~ZipOutputEntry( void ) ...@@ -64,62 +64,55 @@ ZipOutputEntry::~ZipOutputEntry( void )
{ {
} }
void SAL_CALL ZipOutputEntry::closeEntry( ) void SAL_CALL ZipOutputEntry::closeEntry()
throw(IOException, RuntimeException) throw(IOException, RuntimeException)
{ {
ZipEntry *pEntry = m_pCurrentEntry; m_aDeflater.finish();
if (pEntry) while (!m_aDeflater.finished())
doDeflate();
if ((m_pCurrentEntry->nFlag & 8) == 0)
{ {
m_aDeflater.finish(); if (m_pCurrentEntry->nSize != m_aDeflater.getTotalIn())
while (!m_aDeflater.finished())
doDeflate();
if ((pEntry->nFlag & 8) == 0)
{ {
if (pEntry->nSize != m_aDeflater.getTotalIn()) OSL_FAIL("Invalid entry size");
{
OSL_FAIL("Invalid entry size");
}
if (pEntry->nCompressedSize != m_aDeflater.getTotalOut())
{
// Different compression strategies make the merit of this
// test somewhat dubious
pEntry->nCompressedSize = m_aDeflater.getTotalOut();
}
if (pEntry->nCrc != m_aCRC.getValue())
{
OSL_FAIL("Invalid entry CRC-32");
}
} }
else if (m_pCurrentEntry->nCompressedSize != m_aDeflater.getTotalOut())
{ {
if ( !m_bEncryptCurrentEntry ) // Different compression strategies make the merit of this
{ // test somewhat dubious
pEntry->nSize = m_aDeflater.getTotalIn(); m_pCurrentEntry->nCompressedSize = m_aDeflater.getTotalOut();
pEntry->nCompressedSize = m_aDeflater.getTotalOut();
}
pEntry->nCrc = m_aCRC.getValue();
} }
m_aDeflater.reset(); if (m_pCurrentEntry->nCrc != m_aCRC.getValue())
m_aCRC.reset();
if (m_bEncryptCurrentEntry)
{ {
m_bEncryptCurrentEntry = false; OSL_FAIL("Invalid entry CRC-32");
}
m_xCipherContext.clear(); }
else
{
if ( !m_bEncryptCurrentEntry )
{
m_pCurrentEntry->nSize = m_aDeflater.getTotalIn();
m_pCurrentEntry->nCompressedSize = m_aDeflater.getTotalOut();
}
m_pCurrentEntry->nCrc = m_aCRC.getValue();
}
m_aDeflater.reset();
m_aCRC.reset();
uno::Sequence< sal_Int8 > aDigestSeq; if (m_bEncryptCurrentEntry)
if ( m_xDigestContext.is() ) {
{ m_xCipherContext.clear();
aDigestSeq = m_xDigestContext->finalizeDigestAndDispose();
m_xDigestContext.clear();
}
if ( m_pCurrentStream ) uno::Sequence< sal_Int8 > aDigestSeq;
m_pCurrentStream->setDigest( aDigestSeq ); if ( m_xDigestContext.is() )
{
aDigestSeq = m_xDigestContext->finalizeDigestAndDispose();
m_xDigestContext.clear();
} }
m_pCurrentEntry = NULL;
m_pCurrentStream = NULL; if ( m_pCurrentStream )
m_pCurrentStream->setDigest( aDigestSeq );
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment