OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h" | 7 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_parser/include/fpdf_parser_decode.h" | 9 #include "core/fpdfapi/fpdf_parser/include/fpdf_parser_decode.h" |
10 | 10 |
(...skipping 24 matching lines...) Expand all Loading... |
35 if (dwSrcSize == 0) | 35 if (dwSrcSize == 0) |
36 return; | 36 return; |
37 | 37 |
38 if (!pStream->IsMemoryBased()) { | 38 if (!pStream->IsMemoryBased()) { |
39 pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize); | 39 pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize); |
40 if (!pStream->ReadRawData(0, pSrcData, dwSrcSize)) | 40 if (!pStream->ReadRawData(0, pSrcData, dwSrcSize)) |
41 return; | 41 return; |
42 } else { | 42 } else { |
43 pSrcData = pStream->GetRawData(); | 43 pSrcData = pStream->GetRawData(); |
44 } | 44 } |
45 uint8_t* pDecryptedData = pSrcData; | |
46 uint32_t dwDecryptedSize = dwSrcSize; | |
47 if (!pStream->GetDict()->KeyExist("Filter") || bRawAccess) { | 45 if (!pStream->GetDict()->KeyExist("Filter") || bRawAccess) { |
48 m_pData = pDecryptedData; | 46 m_pData = pSrcData; |
49 m_dwSize = dwDecryptedSize; | 47 m_dwSize = dwSrcSize; |
50 } else { | 48 } else { |
51 FX_BOOL bRet = PDF_DataDecode( | 49 FX_BOOL bRet = PDF_DataDecode(pSrcData, dwSrcSize, m_pStream->GetDict(), |
52 pDecryptedData, dwDecryptedSize, m_pStream->GetDict(), m_pData, | 50 m_pData, m_dwSize, m_ImageDecoder, |
53 m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc); | 51 m_pImageParam, estimated_size, bImageAcc); |
54 if (!bRet) { | 52 if (!bRet) { |
55 m_pData = pDecryptedData; | 53 m_pData = pSrcData; |
56 m_dwSize = dwDecryptedSize; | 54 m_dwSize = dwSrcSize; |
57 } | 55 } |
58 } | 56 } |
59 if (pSrcData != pStream->GetRawData() && pSrcData != m_pData) { | 57 if (pSrcData != pStream->GetRawData() && pSrcData != m_pData) |
60 FX_Free(pSrcData); | 58 FX_Free(pSrcData); |
61 } | |
62 if (pDecryptedData != pSrcData && pDecryptedData != m_pData) { | |
63 FX_Free(pDecryptedData); | |
64 } | |
65 m_pSrcData = nullptr; | 59 m_pSrcData = nullptr; |
66 m_bNewBuf = m_pData != pStream->GetRawData(); | 60 m_bNewBuf = m_pData != pStream->GetRawData(); |
67 } | 61 } |
68 | 62 |
69 CPDF_StreamAcc::~CPDF_StreamAcc() { | 63 CPDF_StreamAcc::~CPDF_StreamAcc() { |
70 if (m_bNewBuf) { | 64 if (m_bNewBuf) |
71 FX_Free(m_pData); | 65 FX_Free(m_pData); |
72 } | |
73 FX_Free(m_pSrcData); | 66 FX_Free(m_pSrcData); |
74 } | 67 } |
75 | 68 |
76 const uint8_t* CPDF_StreamAcc::GetData() const { | 69 const uint8_t* CPDF_StreamAcc::GetData() const { |
77 if (m_bNewBuf) { | 70 if (m_bNewBuf) |
78 return m_pData; | 71 return m_pData; |
79 } | 72 return m_pStream ? m_pStream->GetRawData() : nullptr; |
80 if (!m_pStream) { | |
81 return nullptr; | |
82 } | |
83 return m_pStream->GetRawData(); | |
84 } | 73 } |
85 | 74 |
86 uint32_t CPDF_StreamAcc::GetSize() const { | 75 uint32_t CPDF_StreamAcc::GetSize() const { |
87 if (m_bNewBuf) { | 76 if (m_bNewBuf) |
88 return m_dwSize; | 77 return m_dwSize; |
89 } | 78 return m_pStream ? m_pStream->GetRawSize() : 0; |
90 if (!m_pStream) { | |
91 return 0; | |
92 } | |
93 return m_pStream->GetRawSize(); | |
94 } | 79 } |
95 | 80 |
96 uint8_t* CPDF_StreamAcc::DetachData() { | 81 uint8_t* CPDF_StreamAcc::DetachData() { |
97 if (m_bNewBuf) { | 82 if (m_bNewBuf) { |
98 uint8_t* p = m_pData; | 83 uint8_t* p = m_pData; |
99 m_pData = nullptr; | 84 m_pData = nullptr; |
100 m_dwSize = 0; | 85 m_dwSize = 0; |
101 return p; | 86 return p; |
102 } | 87 } |
103 uint8_t* p = FX_Alloc(uint8_t, m_dwSize); | 88 uint8_t* p = FX_Alloc(uint8_t, m_dwSize); |
104 FXSYS_memcpy(p, m_pData, m_dwSize); | 89 FXSYS_memcpy(p, m_pData, m_dwSize); |
105 return p; | 90 return p; |
106 } | 91 } |
OLD | NEW |