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/page/pageint.h" | 7 #include "core/fpdfapi/page/pageint.h" |
8 | 8 |
9 #include <limits.h> | 9 #include <limits.h> |
10 | 10 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 const CFX_WeakPtr<CFX_ByteStringPool>& pPool) | 121 const CFX_WeakPtr<CFX_ByteStringPool>& pPool) |
122 : m_pBuf(pData), | 122 : m_pBuf(pData), |
123 m_Size(dwSize), | 123 m_Size(dwSize), |
124 m_Pos(0), | 124 m_Pos(0), |
125 m_pPool(pPool) {} | 125 m_pPool(pPool) {} |
126 | 126 |
127 CPDF_StreamParser::~CPDF_StreamParser() {} | 127 CPDF_StreamParser::~CPDF_StreamParser() {} |
128 | 128 |
129 std::unique_ptr<CPDF_Stream> CPDF_StreamParser::ReadInlineStream( | 129 std::unique_ptr<CPDF_Stream> CPDF_StreamParser::ReadInlineStream( |
130 CPDF_Document* pDoc, | 130 CPDF_Document* pDoc, |
131 CPDF_Dictionary* pDict, | 131 std::unique_ptr<CPDF_Dictionary> pDict, |
132 CPDF_Object* pCSObj) { | 132 CPDF_Object* pCSObj) { |
133 if (m_Pos == m_Size) | 133 if (m_Pos == m_Size) |
134 return nullptr; | 134 return nullptr; |
135 | 135 |
136 if (PDFCharIsWhitespace(m_pBuf[m_Pos])) | 136 if (PDFCharIsWhitespace(m_pBuf[m_Pos])) |
137 m_Pos++; | 137 m_Pos++; |
138 | 138 |
139 CFX_ByteString Decoder; | 139 CFX_ByteString Decoder; |
140 CPDF_Dictionary* pParam = nullptr; | 140 CPDF_Dictionary* pParam = nullptr; |
141 CPDF_Object* pFilter = pDict->GetDirectObjectFor("Filter"); | 141 CPDF_Object* pFilter = pDict->GetDirectObjectFor("Filter"); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 break; | 224 break; |
225 } | 225 } |
226 dwStreamSize += m_Pos - dwPrevPos; | 226 dwStreamSize += m_Pos - dwPrevPos; |
227 } | 227 } |
228 m_Pos = dwSavePos; | 228 m_Pos = dwSavePos; |
229 pData = FX_Alloc(uint8_t, dwStreamSize); | 229 pData = FX_Alloc(uint8_t, dwStreamSize); |
230 FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize); | 230 FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize); |
231 m_Pos += dwStreamSize; | 231 m_Pos += dwStreamSize; |
232 } | 232 } |
233 pDict->SetNewFor<CPDF_Number>("Length", (int)dwStreamSize); | 233 pDict->SetNewFor<CPDF_Number>("Length", (int)dwStreamSize); |
234 return pdfium::MakeUnique<CPDF_Stream>(pData, dwStreamSize, | 234 return pdfium::MakeUnique<CPDF_Stream>(pData, dwStreamSize, std::move(pDict)); |
235 pdfium::WrapUnique(pDict)); | |
236 } | 235 } |
237 | 236 |
238 CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement() { | 237 CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement() { |
239 m_pLastObj.reset(); | 238 m_pLastObj.reset(); |
240 m_WordSize = 0; | 239 m_WordSize = 0; |
241 if (!PositionIsInBounds()) | 240 if (!PositionIsInBounds()) |
242 return EndOfData; | 241 return EndOfData; |
243 | 242 |
244 int ch = m_pBuf[m_Pos++]; | 243 int ch = m_pBuf[m_Pos++]; |
245 while (1) { | 244 while (1) { |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 | 605 |
607 if (buf.GetLength() > kMaxStringLength) | 606 if (buf.GetLength() > kMaxStringLength) |
608 return CFX_ByteString(buf.GetBuffer(), kMaxStringLength); | 607 return CFX_ByteString(buf.GetBuffer(), kMaxStringLength); |
609 | 608 |
610 return buf.MakeString(); | 609 return buf.MakeString(); |
611 } | 610 } |
612 | 611 |
613 bool CPDF_StreamParser::PositionIsInBounds() const { | 612 bool CPDF_StreamParser::PositionIsInBounds() const { |
614 return m_Pos < m_Size; | 613 return m_Pos < m_Size; |
615 } | 614 } |
OLD | NEW |