void CPDF_StreamAcc::LoadAllData(const CPDF_Stream* pStream, FX_BOOL bRawAccess, FX_DWORD estimated_size, FX_BOOL bImageAcc) { if (!pStream) return; m_pStream = pStream; if (pStream->IsMemoryBased() && (!pStream->GetDict()->KeyExist("Filter") || bRawAccess)) { m_dwSize = pStream->m_dwSize; m_pData = (uint8_t*)pStream->m_pDataBuf; return; } uint8_t* pSrcData; FX_DWORD dwSrcSize = pStream->m_dwSize; if (dwSrcSize == 0) return; if (!pStream->IsMemoryBased()) { pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize); if (!pStream->ReadRawData(0, pSrcData, dwSrcSize)) return; } else { pSrcData = pStream->m_pDataBuf; } uint8_t* pDecryptedData = pSrcData; FX_DWORD dwDecryptedSize = dwSrcSize; if (!pStream->GetDict()->KeyExist("Filter") || bRawAccess) { m_pData = pDecryptedData; m_dwSize = dwDecryptedSize; } else { FX_BOOL bRet = PDF_DataDecode( pDecryptedData, dwDecryptedSize, m_pStream->GetDict(), m_pData, m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc); if (!bRet) { m_pData = pDecryptedData; m_dwSize = dwDecryptedSize; } } if (pSrcData != pStream->m_pDataBuf && pSrcData != m_pData) { FX_Free(pSrcData); } if (pDecryptedData != pSrcData && pDecryptedData != m_pData) { FX_Free(pDecryptedData); } m_pSrcData = NULL; m_bNewBuf = m_pData != pStream->m_pDataBuf; }
void CPDF_StreamAcc::LoadAllData(const CPDF_Stream* pStream, bool bRawAccess, uint32_t estimated_size, bool bImageAcc) { if (!pStream) return; m_pStream = pStream; if (pStream->IsMemoryBased() && (!pStream->HasFilter() || bRawAccess)) { m_dwSize = pStream->GetRawSize(); m_pData = pStream->GetRawData(); return; } uint32_t dwSrcSize = pStream->GetRawSize(); if (dwSrcSize == 0) return; uint8_t* pSrcData; if (!pStream->IsMemoryBased()) { pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize); if (!pStream->ReadRawData(0, pSrcData, dwSrcSize)) return; } else { pSrcData = pStream->GetRawData(); } if (!pStream->HasFilter() || bRawAccess) { m_pData = pSrcData; m_dwSize = dwSrcSize; } else if (!PDF_DataDecode(pSrcData, dwSrcSize, m_pStream->GetDict(), m_pData, m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc)) { m_pData = pSrcData; m_dwSize = dwSrcSize; } if (pSrcData != pStream->GetRawData() && pSrcData != m_pData) FX_Free(pSrcData); m_pSrcData = nullptr; m_bNewBuf = m_pData != pStream->GetRawData(); }
void CPDF_StreamAcc::LoadAllData(const CPDF_Stream* pStream, FX_BOOL bRawAccess, FX_DWORD estimated_size, FX_BOOL bImageAcc) { if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) { return; } m_pStream = pStream; if (pStream->IsMemoryBased() && (!pStream->GetDict()->KeyExist(FX_BSTRC("Filter")) || bRawAccess)) { m_dwSize = pStream->m_dwSize; m_pData = (FX_LPBYTE)pStream->m_pDataBuf; return; } FX_LPBYTE pSrcData; FX_DWORD dwSrcSize = pStream->m_dwSize; if (dwSrcSize == 0) { return; } if (!pStream->IsMemoryBased()) { pSrcData = m_pSrcData = FX_Alloc(FX_BYTE, dwSrcSize); if (!pSrcData || !pStream->ReadRawData(0, pSrcData, dwSrcSize)) { return; } } else { pSrcData = pStream->m_pDataBuf; } FX_LPBYTE pDecryptedData; FX_DWORD dwDecryptedSize; if (pStream->m_pCryptoHandler) { CFX_BinaryBuf dest_buf; dest_buf.EstimateSize(pStream->m_pCryptoHandler->DecryptGetSize(dwSrcSize)); FX_LPVOID context = pStream->m_pCryptoHandler->DecryptStart(pStream->GetObjNum(), pStream->m_GenNum); pStream->m_pCryptoHandler->DecryptStream(context, pSrcData, dwSrcSize, dest_buf); pStream->m_pCryptoHandler->DecryptFinish(context, dest_buf); pDecryptedData = dest_buf.GetBuffer(); dwDecryptedSize = dest_buf.GetSize(); dest_buf.DetachBuffer(); } else { pDecryptedData = pSrcData; dwDecryptedSize = dwSrcSize; } if (!pStream->GetDict()->KeyExist(FX_BSTRC("Filter")) || bRawAccess) { m_pData = pDecryptedData; m_dwSize = dwDecryptedSize; } else { FX_BOOL bRet = PDF_DataDecode(pDecryptedData, dwDecryptedSize, m_pStream->GetDict(), m_pData, m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc); if (!bRet) { m_pData = pDecryptedData; m_dwSize = dwDecryptedSize; } } if (pSrcData != pStream->m_pDataBuf && pSrcData != m_pData) { FX_Free(pSrcData); } if (pDecryptedData != pSrcData && pDecryptedData != m_pData) { FX_Free(pDecryptedData); } m_pSrcData = NULL; m_bNewBuf = m_pData != pStream->m_pDataBuf; }