summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser/cpdf_parser.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_parser.cpp116
1 files changed, 0 insertions, 116 deletions
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 32c616c1c6..da51eb1c83 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -1258,122 +1258,6 @@ FX_FILESIZE CPDF_Parser::GetObjectSize(uint32_t objnum) const {
return *it - offset;
}
-std::vector<uint8_t> CPDF_Parser::GetIndirectBinary(uint32_t objnum) {
- std::vector<uint8_t> buffer;
- if (!IsValidObjectNumber(objnum))
- return buffer;
-
- if (GetObjectType(objnum) == ObjectType::kCompressed) {
- CFX_RetainPtr<CPDF_StreamAcc> pObjStream =
- GetObjectStream(m_ObjectInfo[objnum].pos);
- if (!pObjStream)
- return buffer;
-
- int32_t offset = GetStreamFirst(pObjStream);
- const uint8_t* pData = pObjStream->GetData();
- uint32_t totalsize = pObjStream->GetSize();
- auto file = pdfium::MakeRetain<CFX_MemoryStream>(
- const_cast<uint8_t*>(pData), static_cast<size_t>(totalsize), false);
- CPDF_SyntaxParser syntax;
- syntax.InitParser(file, 0);
-
- for (int i = GetStreamNCount(pObjStream); i > 0; --i) {
- uint32_t thisnum = syntax.GetDirectNum();
- uint32_t thisoff = syntax.GetDirectNum();
- if (thisnum != objnum)
- continue;
-
- size_t size = 0;
- if (i == 1) {
- size = totalsize - (thisoff + offset);
- } else {
- syntax.GetDirectNum(); // Skip nextnum.
- uint32_t nextoff = syntax.GetDirectNum();
- size = nextoff - thisoff;
- }
-
- buffer.resize(size);
- memcpy(buffer.data(), pData + thisoff + offset, size);
- break;
- }
- return buffer;
- }
-
- if (GetObjectType(objnum) != ObjectType::kNotCompressed)
- return buffer;
-
- FX_FILESIZE pos = m_ObjectInfo[objnum].pos;
- if (pos == 0)
- return buffer;
-
- FX_FILESIZE SavedPos = m_pSyntax->GetPos();
- m_pSyntax->SetPos(pos);
-
- bool bIsNumber;
- CFX_ByteString word = m_pSyntax->GetNextWord(&bIsNumber);
- if (!bIsNumber) {
- m_pSyntax->SetPos(SavedPos);
- return buffer;
- }
-
- uint32_t parser_objnum = FXSYS_atoui(word.c_str());
- if (parser_objnum && parser_objnum != objnum) {
- m_pSyntax->SetPos(SavedPos);
- return buffer;
- }
-
- word = m_pSyntax->GetNextWord(&bIsNumber);
- if (!bIsNumber) {
- m_pSyntax->SetPos(SavedPos);
- return buffer;
- }
-
- if (m_pSyntax->GetKeyword() != "obj") {
- m_pSyntax->SetPos(SavedPos);
- return buffer;
- }
-
- auto it = m_SortedOffset.find(pos);
- if (it == m_SortedOffset.end() || ++it == m_SortedOffset.end()) {
- m_pSyntax->SetPos(SavedPos);
- return buffer;
- }
-
- FX_FILESIZE nextoff = *it;
- bool bNextOffValid = false;
- if (nextoff != pos) {
- m_pSyntax->SetPos(nextoff);
- word = m_pSyntax->GetNextWord(&bIsNumber);
- if (word == "xref") {
- bNextOffValid = true;
- } else if (bIsNumber) {
- word = m_pSyntax->GetNextWord(&bIsNumber);
- if (bIsNumber && m_pSyntax->GetKeyword() == "obj") {
- bNextOffValid = true;
- }
- }
- }
-
- if (!bNextOffValid) {
- m_pSyntax->SetPos(pos);
- while (1) {
- if (m_pSyntax->GetKeyword() == "endobj")
- break;
-
- if (m_pSyntax->GetPos() == m_pSyntax->m_FileLen)
- break;
- }
- nextoff = m_pSyntax->GetPos();
- }
-
- size_t size = (uint32_t)(nextoff - pos);
- buffer.resize(size);
- m_pSyntax->SetPos(pos);
- m_pSyntax->ReadBlock(buffer.data(), size);
- m_pSyntax->SetPos(SavedPos);
- return buffer;
-}
-
std::unique_ptr<CPDF_Object> CPDF_Parser::ParseIndirectObjectAt(
CPDF_IndirectObjectHolder* pObjList,
FX_FILESIZE pos,