OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 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_page/pageint.h" | 7 #include "core/fpdfapi/fpdf_page/pageint.h" |
8 | 8 |
9 #include <limits.h> | 9 #include <limits.h> |
10 | 10 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 dest_buf, dest_size); | 114 dest_buf, dest_size); |
115 } | 115 } |
116 if (decoder == "LZWDecode" || decoder == "LZW") { | 116 if (decoder == "LZWDecode" || decoder == "LZW") { |
117 return FPDFAPI_FlateOrLZWDecode(TRUE, src_buf, limit, pParam, 0, dest_buf, | 117 return FPDFAPI_FlateOrLZWDecode(TRUE, src_buf, limit, pParam, 0, dest_buf, |
118 dest_size); | 118 dest_size); |
119 } | 119 } |
120 if (decoder == "DCTDecode" || decoder == "DCT") { | 120 if (decoder == "DCTDecode" || decoder == "DCT") { |
121 CCodec_ScanlineDecoder* pDecoder = | 121 CCodec_ScanlineDecoder* pDecoder = |
122 CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder( | 122 CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder( |
123 src_buf, limit, width, height, 0, | 123 src_buf, limit, width, height, 0, |
124 pParam ? pParam->GetIntegerBy("ColorTransform", 1) : 1); | 124 pParam ? pParam->GetIntegerFor("ColorTransform", 1) : 1); |
125 return DecodeAllScanlines(pDecoder, dest_buf, dest_size); | 125 return DecodeAllScanlines(pDecoder, dest_buf, dest_size); |
126 } | 126 } |
127 if (decoder == "RunLengthDecode" || decoder == "RL") { | 127 if (decoder == "RunLengthDecode" || decoder == "RL") { |
128 return RunLengthDecode(src_buf, limit, dest_buf, dest_size); | 128 return RunLengthDecode(src_buf, limit, dest_buf, dest_size); |
129 } | 129 } |
130 dest_size = 0; | 130 dest_size = 0; |
131 dest_buf = 0; | 131 dest_buf = 0; |
132 return (uint32_t)-1; | 132 return (uint32_t)-1; |
133 } | 133 } |
134 | 134 |
135 CPDF_Stream* CPDF_StreamParser::ReadInlineStream(CPDF_Document* pDoc, | 135 CPDF_Stream* CPDF_StreamParser::ReadInlineStream(CPDF_Document* pDoc, |
136 CPDF_Dictionary* pDict, | 136 CPDF_Dictionary* pDict, |
137 CPDF_Object* pCSObj) { | 137 CPDF_Object* pCSObj) { |
138 if (m_Pos == m_Size) | 138 if (m_Pos == m_Size) |
139 return nullptr; | 139 return nullptr; |
140 | 140 |
141 if (PDFCharIsWhitespace(m_pBuf[m_Pos])) | 141 if (PDFCharIsWhitespace(m_pBuf[m_Pos])) |
142 m_Pos++; | 142 m_Pos++; |
143 | 143 |
144 CFX_ByteString Decoder; | 144 CFX_ByteString Decoder; |
145 CPDF_Dictionary* pParam = nullptr; | 145 CPDF_Dictionary* pParam = nullptr; |
146 CPDF_Object* pFilter = pDict->GetDirectObjectBy("Filter"); | 146 CPDF_Object* pFilter = pDict->GetDirectObjectFor("Filter"); |
147 if (pFilter) { | 147 if (pFilter) { |
148 if (CPDF_Array* pArray = pFilter->AsArray()) { | 148 if (CPDF_Array* pArray = pFilter->AsArray()) { |
149 Decoder = pArray->GetStringAt(0); | 149 Decoder = pArray->GetStringAt(0); |
150 CPDF_Array* pParams = pDict->GetArrayBy("DecodeParms"); | 150 CPDF_Array* pParams = pDict->GetArrayFor("DecodeParms"); |
151 if (pParams) | 151 if (pParams) |
152 pParam = pParams->GetDictAt(0); | 152 pParam = pParams->GetDictAt(0); |
153 } else { | 153 } else { |
154 Decoder = pFilter->GetString(); | 154 Decoder = pFilter->GetString(); |
155 pParam = pDict->GetDictBy("DecodeParms"); | 155 pParam = pDict->GetDictFor("DecodeParms"); |
156 } | 156 } |
157 } | 157 } |
158 uint32_t width = pDict->GetIntegerBy("Width"); | 158 uint32_t width = pDict->GetIntegerFor("Width"); |
159 uint32_t height = pDict->GetIntegerBy("Height"); | 159 uint32_t height = pDict->GetIntegerFor("Height"); |
160 uint32_t OrigSize = 0; | 160 uint32_t OrigSize = 0; |
161 if (pCSObj) { | 161 if (pCSObj) { |
162 uint32_t bpc = pDict->GetIntegerBy("BitsPerComponent"); | 162 uint32_t bpc = pDict->GetIntegerFor("BitsPerComponent"); |
163 uint32_t nComponents = 1; | 163 uint32_t nComponents = 1; |
164 CPDF_ColorSpace* pCS = pDoc->LoadColorSpace(pCSObj); | 164 CPDF_ColorSpace* pCS = pDoc->LoadColorSpace(pCSObj); |
165 if (pCS) { | 165 if (pCS) { |
166 nComponents = pCS->CountComponents(); | 166 nComponents = pCS->CountComponents(); |
167 pDoc->GetPageData()->ReleaseColorSpace(pCSObj); | 167 pDoc->GetPageData()->ReleaseColorSpace(pCSObj); |
168 } else { | 168 } else { |
169 nComponents = 3; | 169 nComponents = 3; |
170 } | 170 } |
171 uint32_t pitch = width; | 171 uint32_t pitch = width; |
172 if (bpc && pitch > INT_MAX / bpc) | 172 if (bpc && pitch > INT_MAX / bpc) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 m_Pos = dwPrevPos; | 229 m_Pos = dwPrevPos; |
230 break; | 230 break; |
231 } | 231 } |
232 dwStreamSize += m_Pos - dwPrevPos; | 232 dwStreamSize += m_Pos - dwPrevPos; |
233 } | 233 } |
234 m_Pos = dwSavePos; | 234 m_Pos = dwSavePos; |
235 pData = FX_Alloc(uint8_t, dwStreamSize); | 235 pData = FX_Alloc(uint8_t, dwStreamSize); |
236 FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize); | 236 FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize); |
237 m_Pos += dwStreamSize; | 237 m_Pos += dwStreamSize; |
238 } | 238 } |
239 pDict->SetAtInteger("Length", (int)dwStreamSize); | 239 pDict->SetIntegerFor("Length", (int)dwStreamSize); |
240 return new CPDF_Stream(pData, dwStreamSize, pDict); | 240 return new CPDF_Stream(pData, dwStreamSize, pDict); |
241 } | 241 } |
242 | 242 |
243 CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement() { | 243 CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement() { |
244 if (m_pLastObj) { | 244 if (m_pLastObj) { |
245 m_pLastObj->Release(); | 245 m_pLastObj->Release(); |
246 m_pLastObj = nullptr; | 246 m_pLastObj = nullptr; |
247 } | 247 } |
248 | 248 |
249 m_WordSize = 0; | 249 m_WordSize = 0; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)); | 362 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)); |
363 CPDF_Object* pObj = ReadNextObject(true, 0); | 363 CPDF_Object* pObj = ReadNextObject(true, 0); |
364 if (!pObj) { | 364 if (!pObj) { |
365 pDict->Release(); | 365 pDict->Release(); |
366 return nullptr; | 366 return nullptr; |
367 } | 367 } |
368 | 368 |
369 if (key.IsEmpty()) | 369 if (key.IsEmpty()) |
370 pObj->Release(); | 370 pObj->Release(); |
371 else | 371 else |
372 pDict->SetAt(key, pObj); | 372 pDict->SetFor(key, pObj); |
373 } | 373 } |
374 return pDict; | 374 return pDict; |
375 } | 375 } |
376 | 376 |
377 if (first_char == '[') { | 377 if (first_char == '[') { |
378 if ((!bAllowNestedArray && dwInArrayLevel) || | 378 if ((!bAllowNestedArray && dwInArrayLevel) || |
379 dwInArrayLevel > kMaxNestedArrayLevel) { | 379 dwInArrayLevel > kMaxNestedArrayLevel) { |
380 return nullptr; | 380 return nullptr; |
381 } | 381 } |
382 | 382 |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
644 !pPage->m_pFormDict) { | 644 !pPage->m_pFormDict) { |
645 m_Status = Done; | 645 m_Status = Done; |
646 return; | 646 return; |
647 } | 647 } |
648 m_pObjectHolder = pPage; | 648 m_pObjectHolder = pPage; |
649 m_bForm = FALSE; | 649 m_bForm = FALSE; |
650 m_Status = ToBeContinued; | 650 m_Status = ToBeContinued; |
651 m_InternalStage = STAGE_GETCONTENT; | 651 m_InternalStage = STAGE_GETCONTENT; |
652 m_CurrentOffset = 0; | 652 m_CurrentOffset = 0; |
653 | 653 |
654 CPDF_Object* pContent = pPage->m_pFormDict->GetDirectObjectBy("Contents"); | 654 CPDF_Object* pContent = pPage->m_pFormDict->GetDirectObjectFor("Contents"); |
655 if (!pContent) { | 655 if (!pContent) { |
656 m_Status = Done; | 656 m_Status = Done; |
657 return; | 657 return; |
658 } | 658 } |
659 if (CPDF_Stream* pStream = pContent->AsStream()) { | 659 if (CPDF_Stream* pStream = pContent->AsStream()) { |
660 m_nStreams = 0; | 660 m_nStreams = 0; |
661 m_pSingleStream.reset(new CPDF_StreamAcc); | 661 m_pSingleStream.reset(new CPDF_StreamAcc); |
662 m_pSingleStream->LoadAllData(pStream, FALSE); | 662 m_pSingleStream->LoadAllData(pStream, FALSE); |
663 } else if (CPDF_Array* pArray = pContent->AsArray()) { | 663 } else if (CPDF_Array* pArray = pContent->AsArray()) { |
664 m_nStreams = pArray->GetCount(); | 664 m_nStreams = pArray->GetCount(); |
665 if (m_nStreams) | 665 if (m_nStreams) |
666 m_StreamArray.resize(m_nStreams); | 666 m_StreamArray.resize(m_nStreams); |
667 else | 667 else |
668 m_Status = Done; | 668 m_Status = Done; |
669 } else { | 669 } else { |
670 m_Status = Done; | 670 m_Status = Done; |
671 } | 671 } |
672 } | 672 } |
673 | 673 |
674 void CPDF_ContentParser::Start(CPDF_Form* pForm, | 674 void CPDF_ContentParser::Start(CPDF_Form* pForm, |
675 CPDF_AllStates* pGraphicStates, | 675 CPDF_AllStates* pGraphicStates, |
676 const CFX_Matrix* pParentMatrix, | 676 const CFX_Matrix* pParentMatrix, |
677 CPDF_Type3Char* pType3Char, | 677 CPDF_Type3Char* pType3Char, |
678 int level) { | 678 int level) { |
679 m_pType3Char = pType3Char; | 679 m_pType3Char = pType3Char; |
680 m_pObjectHolder = pForm; | 680 m_pObjectHolder = pForm; |
681 m_bForm = TRUE; | 681 m_bForm = TRUE; |
682 CFX_Matrix form_matrix = pForm->m_pFormDict->GetMatrixBy("Matrix"); | 682 CFX_Matrix form_matrix = pForm->m_pFormDict->GetMatrixFor("Matrix"); |
683 if (pGraphicStates) { | 683 if (pGraphicStates) { |
684 form_matrix.Concat(pGraphicStates->m_CTM); | 684 form_matrix.Concat(pGraphicStates->m_CTM); |
685 } | 685 } |
686 CPDF_Array* pBBox = pForm->m_pFormDict->GetArrayBy("BBox"); | 686 CPDF_Array* pBBox = pForm->m_pFormDict->GetArrayFor("BBox"); |
687 CFX_FloatRect form_bbox; | 687 CFX_FloatRect form_bbox; |
688 CPDF_Path ClipPath; | 688 CPDF_Path ClipPath; |
689 if (pBBox) { | 689 if (pBBox) { |
690 form_bbox = pBBox->GetRect(); | 690 form_bbox = pBBox->GetRect(); |
691 ClipPath.Emplace(); | 691 ClipPath.Emplace(); |
692 ClipPath.AppendRect(form_bbox.left, form_bbox.bottom, form_bbox.right, | 692 ClipPath.AppendRect(form_bbox.left, form_bbox.bottom, form_bbox.right, |
693 form_bbox.top); | 693 form_bbox.top); |
694 ClipPath.Transform(&form_matrix); | 694 ClipPath.Transform(&form_matrix); |
695 if (pParentMatrix) { | 695 if (pParentMatrix) { |
696 ClipPath.Transform(pParentMatrix); | 696 ClipPath.Transform(pParentMatrix); |
697 } | 697 } |
698 form_bbox.Transform(&form_matrix); | 698 form_bbox.Transform(&form_matrix); |
699 if (pParentMatrix) { | 699 if (pParentMatrix) { |
700 form_bbox.Transform(pParentMatrix); | 700 form_bbox.Transform(pParentMatrix); |
701 } | 701 } |
702 } | 702 } |
703 CPDF_Dictionary* pResources = pForm->m_pFormDict->GetDictBy("Resources"); | 703 CPDF_Dictionary* pResources = pForm->m_pFormDict->GetDictFor("Resources"); |
704 m_pParser.reset(new CPDF_StreamContentParser( | 704 m_pParser.reset(new CPDF_StreamContentParser( |
705 pForm->m_pDocument, pForm->m_pPageResources, pForm->m_pResources, | 705 pForm->m_pDocument, pForm->m_pPageResources, pForm->m_pResources, |
706 pParentMatrix, pForm, pResources, &form_bbox, pGraphicStates, level)); | 706 pParentMatrix, pForm, pResources, &form_bbox, pGraphicStates, level)); |
707 m_pParser->GetCurStates()->m_CTM = form_matrix; | 707 m_pParser->GetCurStates()->m_CTM = form_matrix; |
708 m_pParser->GetCurStates()->m_ParentMatrix = form_matrix; | 708 m_pParser->GetCurStates()->m_ParentMatrix = form_matrix; |
709 if (ClipPath) { | 709 if (ClipPath) { |
710 m_pParser->GetCurStates()->m_ClipPath.AppendPath(ClipPath, FXFILL_WINDING, | 710 m_pParser->GetCurStates()->m_ClipPath.AppendPath(ClipPath, FXFILL_WINDING, |
711 TRUE); | 711 TRUE); |
712 } | 712 } |
713 if (pForm->m_Transparency & PDFTRANS_GROUP) { | 713 if (pForm->m_Transparency & PDFTRANS_GROUP) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 } | 752 } |
753 m_StreamArray.clear(); | 753 m_StreamArray.clear(); |
754 } else { | 754 } else { |
755 m_pData = (uint8_t*)m_pSingleStream->GetData(); | 755 m_pData = (uint8_t*)m_pSingleStream->GetData(); |
756 m_Size = m_pSingleStream->GetSize(); | 756 m_Size = m_pSingleStream->GetSize(); |
757 } | 757 } |
758 m_InternalStage = STAGE_PARSE; | 758 m_InternalStage = STAGE_PARSE; |
759 m_CurrentOffset = 0; | 759 m_CurrentOffset = 0; |
760 } else { | 760 } else { |
761 CPDF_Array* pContent = | 761 CPDF_Array* pContent = |
762 m_pObjectHolder->m_pFormDict->GetArrayBy("Contents"); | 762 m_pObjectHolder->m_pFormDict->GetArrayFor("Contents"); |
763 m_StreamArray[m_CurrentOffset].reset(new CPDF_StreamAcc); | 763 m_StreamArray[m_CurrentOffset].reset(new CPDF_StreamAcc); |
764 CPDF_Stream* pStreamObj = ToStream( | 764 CPDF_Stream* pStreamObj = ToStream( |
765 pContent ? pContent->GetDirectObjectAt(m_CurrentOffset) : nullptr); | 765 pContent ? pContent->GetDirectObjectAt(m_CurrentOffset) : nullptr); |
766 m_StreamArray[m_CurrentOffset]->LoadAllData(pStreamObj, FALSE); | 766 m_StreamArray[m_CurrentOffset]->LoadAllData(pStreamObj, FALSE); |
767 m_CurrentOffset++; | 767 m_CurrentOffset++; |
768 } | 768 } |
769 } | 769 } |
770 if (m_InternalStage == STAGE_PARSE) { | 770 if (m_InternalStage == STAGE_PARSE) { |
771 if (!m_pParser) { | 771 if (!m_pParser) { |
772 m_pParser.reset(new CPDF_StreamContentParser( | 772 m_pParser.reset(new CPDF_StreamContentParser( |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
817 } | 817 } |
818 m_Status = Done; | 818 m_Status = Done; |
819 return; | 819 return; |
820 } | 820 } |
821 steps++; | 821 steps++; |
822 if (pPause && pPause->NeedToPauseNow()) { | 822 if (pPause && pPause->NeedToPauseNow()) { |
823 break; | 823 break; |
824 } | 824 } |
825 } | 825 } |
826 } | 826 } |
OLD | NEW |