| 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 "pageint.h" | 7 #include "pageint.h" |
| 8 | 8 |
| 9 #include <limits.h> | 9 #include <limits.h> |
| 10 | 10 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 break; | 68 break; |
| 69 default: | 69 default: |
| 70 AddObjectParam(syntax.GetObject()); | 70 AddObjectParam(syntax.GetObject()); |
| 71 } | 71 } |
| 72 } | 72 } |
| 73 return m_pSyntax->GetPos(); | 73 return m_pSyntax->GetPos(); |
| 74 } | 74 } |
| 75 void _PDF_ReplaceAbbr(CPDF_Object* pObj); | 75 void _PDF_ReplaceAbbr(CPDF_Object* pObj); |
| 76 void CPDF_StreamContentParser::Handle_BeginImage() { | 76 void CPDF_StreamContentParser::Handle_BeginImage() { |
| 77 FX_FILESIZE savePos = m_pSyntax->GetPos(); | 77 FX_FILESIZE savePos = m_pSyntax->GetPos(); |
| 78 CPDF_Dictionary* pDict = CPDF_Dictionary::Create(); | 78 CPDF_Dictionary* pDict = new CPDF_Dictionary; |
| 79 while (1) { | 79 while (1) { |
| 80 CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement(); | 80 CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement(); |
| 81 if (type == CPDF_StreamParser::Keyword) { | 81 if (type == CPDF_StreamParser::Keyword) { |
| 82 CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(), | 82 CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(), |
| 83 m_pSyntax->GetWordSize()); | 83 m_pSyntax->GetWordSize()); |
| 84 if (bsKeyword != "ID") { | 84 if (bsKeyword != "ID") { |
| 85 m_pSyntax->SetPos(savePos); | 85 m_pSyntax->SetPos(savePos); |
| 86 pDict->Release(); | 86 pDict->Release(); |
| 87 return; | 87 return; |
| 88 } | 88 } |
| (...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 } | 509 } |
| 510 | 510 |
| 511 m_WordBuffer[m_WordSize] = 0; | 511 m_WordBuffer[m_WordSize] = 0; |
| 512 if (bIsNumber) | 512 if (bIsNumber) |
| 513 return Number; | 513 return Number; |
| 514 if (m_WordBuffer[0] == '/') | 514 if (m_WordBuffer[0] == '/') |
| 515 return Name; | 515 return Name; |
| 516 | 516 |
| 517 if (m_WordSize == 4) { | 517 if (m_WordSize == 4) { |
| 518 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) { | 518 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) { |
| 519 m_pLastObj = CPDF_Boolean::Create(TRUE); | 519 m_pLastObj = new CPDF_Boolean(TRUE); |
| 520 return Others; | 520 return Others; |
| 521 } | 521 } |
| 522 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) { | 522 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) { |
| 523 m_pLastObj = CPDF_Null::Create(); | 523 m_pLastObj = new CPDF_Null; |
| 524 return Others; | 524 return Others; |
| 525 } | 525 } |
| 526 } else if (m_WordSize == 5) { | 526 } else if (m_WordSize == 5) { |
| 527 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') { | 527 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') { |
| 528 m_pLastObj = CPDF_Boolean::Create(FALSE); | 528 m_pLastObj = new CPDF_Boolean(FALSE); |
| 529 return Others; | 529 return Others; |
| 530 } | 530 } |
| 531 } | 531 } |
| 532 return Keyword; | 532 return Keyword; |
| 533 } | 533 } |
| 534 | 534 |
| 535 void CPDF_StreamParser::SkipPathObject() { | 535 void CPDF_StreamParser::SkipPathObject() { |
| 536 FX_DWORD command_startpos = m_Pos; | 536 FX_DWORD command_startpos = m_Pos; |
| 537 if (!PositionIsInBounds()) | 537 if (!PositionIsInBounds()) |
| 538 return; | 538 return; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 } | 596 } |
| 597 CPDF_Object* CPDF_StreamParser::ReadNextObject(FX_BOOL bAllowNestedArray, | 597 CPDF_Object* CPDF_StreamParser::ReadNextObject(FX_BOOL bAllowNestedArray, |
| 598 FX_BOOL bInArray) { | 598 FX_BOOL bInArray) { |
| 599 FX_BOOL bIsNumber; | 599 FX_BOOL bIsNumber; |
| 600 GetNextWord(bIsNumber); | 600 GetNextWord(bIsNumber); |
| 601 if (m_WordSize == 0) { | 601 if (m_WordSize == 0) { |
| 602 return NULL; | 602 return NULL; |
| 603 } | 603 } |
| 604 if (bIsNumber) { | 604 if (bIsNumber) { |
| 605 m_WordBuffer[m_WordSize] = 0; | 605 m_WordBuffer[m_WordSize] = 0; |
| 606 return CPDF_Number::Create(CFX_ByteStringC(m_WordBuffer, m_WordSize)); | 606 return new CPDF_Number(CFX_ByteStringC(m_WordBuffer, m_WordSize)); |
| 607 } | 607 } |
| 608 int first_char = m_WordBuffer[0]; | 608 int first_char = m_WordBuffer[0]; |
| 609 if (first_char == '/') { | 609 if (first_char == '/') { |
| 610 return CPDF_Name::Create( | 610 return new CPDF_Name( |
| 611 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); | 611 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); |
| 612 } | 612 } |
| 613 if (first_char == '(') { | 613 if (first_char == '(') { |
| 614 return CPDF_String::Create(ReadString()); | 614 return new CPDF_String(ReadString(), FALSE); |
| 615 } | 615 } |
| 616 if (first_char == '<') { | 616 if (first_char == '<') { |
| 617 if (m_WordSize == 1) { | 617 if (m_WordSize == 1) { |
| 618 return CPDF_String::Create(ReadHexString(), TRUE); | 618 return new CPDF_String(ReadHexString(), TRUE); |
| 619 } | 619 } |
| 620 CPDF_Dictionary* pDict = CPDF_Dictionary::Create(); | 620 CPDF_Dictionary* pDict = new CPDF_Dictionary; |
| 621 while (1) { | 621 while (1) { |
| 622 GetNextWord(bIsNumber); | 622 GetNextWord(bIsNumber); |
| 623 if (m_WordSize == 0) { | 623 if (m_WordSize == 0) { |
| 624 pDict->Release(); | 624 pDict->Release(); |
| 625 return NULL; | 625 return nullptr; |
| 626 } | 626 } |
| 627 if (m_WordSize == 2 && m_WordBuffer[0] == '>') { | 627 if (m_WordSize == 2 && m_WordBuffer[0] == '>') { |
| 628 break; | 628 break; |
| 629 } | 629 } |
| 630 if (m_WordBuffer[0] != '/') { | 630 if (m_WordBuffer[0] != '/') { |
| 631 pDict->Release(); | 631 pDict->Release(); |
| 632 return NULL; | 632 return nullptr; |
| 633 } | 633 } |
| 634 CFX_ByteString key = | 634 CFX_ByteString key = |
| 635 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)); | 635 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)); |
| 636 CPDF_Object* pObj = ReadNextObject(TRUE); | 636 CPDF_Object* pObj = ReadNextObject(TRUE); |
| 637 if (!pObj) { | 637 if (!pObj) { |
| 638 if (pDict) { | 638 pDict->Release(); |
| 639 pDict->Release(); | 639 return nullptr; |
| 640 } | |
| 641 return NULL; | |
| 642 } | 640 } |
| 643 if (!key.IsEmpty()) { | 641 if (!key.IsEmpty()) { |
| 644 pDict->SetAt(key, pObj); | 642 pDict->SetAt(key, pObj); |
| 645 } else { | 643 } else { |
| 646 pObj->Release(); | 644 pObj->Release(); |
| 647 } | 645 } |
| 648 } | 646 } |
| 649 return pDict; | 647 return pDict; |
| 650 } | 648 } |
| 651 if (first_char == '[') { | 649 if (first_char == '[') { |
| 652 if (!bAllowNestedArray && bInArray) { | 650 if (!bAllowNestedArray && bInArray) { |
| 653 return NULL; | 651 return NULL; |
| 654 } | 652 } |
| 655 CPDF_Array* pArray = CPDF_Array::Create(); | 653 CPDF_Array* pArray = new CPDF_Array; |
| 656 while (1) { | 654 while (1) { |
| 657 CPDF_Object* pObj = ReadNextObject(bAllowNestedArray, TRUE); | 655 CPDF_Object* pObj = ReadNextObject(bAllowNestedArray, TRUE); |
| 658 if (!pObj) { | 656 if (pObj) { |
| 659 if (m_WordSize == 0 || m_WordBuffer[0] == ']') { | |
| 660 return pArray; | |
| 661 } | |
| 662 if (m_WordBuffer[0] == '[') { | |
| 663 continue; | |
| 664 } | |
| 665 } else { | |
| 666 pArray->Add(pObj); | 657 pArray->Add(pObj); |
| 658 continue; |
| 667 } | 659 } |
| 660 |
| 661 if (m_WordSize == 0 || m_WordBuffer[0] == ']') |
| 662 break; |
| 668 } | 663 } |
| 664 return pArray; |
| 669 } | 665 } |
| 670 if (m_WordSize == 4) { | 666 if (m_WordSize == 4) { |
| 671 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) { | 667 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) { |
| 672 return CPDF_Boolean::Create(TRUE); | 668 return new CPDF_Boolean(TRUE); |
| 673 } | 669 } |
| 674 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) { | 670 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) { |
| 675 return CPDF_Null::Create(); | 671 return new CPDF_Null; |
| 676 } | 672 } |
| 677 } else if (m_WordSize == 5) { | 673 } else if (m_WordSize == 5) { |
| 678 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') { | 674 if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') { |
| 679 return CPDF_Boolean::Create(FALSE); | 675 return new CPDF_Boolean(FALSE); |
| 680 } | 676 } |
| 681 } | 677 } |
| 682 return NULL; | 678 return NULL; |
| 683 } | 679 } |
| 684 void CPDF_StreamParser::GetNextWord(FX_BOOL& bIsNumber) { | 680 void CPDF_StreamParser::GetNextWord(FX_BOOL& bIsNumber) { |
| 685 m_WordSize = 0; | 681 m_WordSize = 0; |
| 686 bIsNumber = TRUE; | 682 bIsNumber = TRUE; |
| 687 if (!PositionIsInBounds()) | 683 if (!PositionIsInBounds()) |
| 688 return; | 684 return; |
| 689 | 685 |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1120 } | 1116 } |
| 1121 m_Status = Done; | 1117 m_Status = Done; |
| 1122 return; | 1118 return; |
| 1123 } | 1119 } |
| 1124 steps++; | 1120 steps++; |
| 1125 if (pPause && pPause->NeedToPauseNow()) { | 1121 if (pPause && pPause->NeedToPauseNow()) { |
| 1126 break; | 1122 break; |
| 1127 } | 1123 } |
| 1128 } | 1124 } |
| 1129 } | 1125 } |
| OLD | NEW |