diff options
Diffstat (limited to 'xfa/fxfa')
-rw-r--r-- | xfa/fxfa/cxfa_ffdoc.cpp | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp index 9dc58adb9a..828fb58820 100644 --- a/xfa/fxfa/cxfa_ffdoc.cpp +++ b/xfa/fxfa/cxfa_ffdoc.cpp @@ -36,127 +36,6 @@ #include "xfa/fxfa/parser/cxfa_dynamicrender.h" #include "xfa/fxfa/parser/cxfa_node.h" -namespace { - -struct FX_BASE64DATA { - uint32_t data1 : 2; - uint32_t data2 : 6; - uint32_t data3 : 4; - uint32_t data4 : 4; - uint32_t data5 : 6; - uint32_t data6 : 2; - uint32_t data7 : 8; -}; - -const uint8_t kStartValuesRemoved = 43; -const uint8_t kDecoderMapSize = 80; -const uint8_t g_FXBase64DecoderMap[kDecoderMapSize] = { - 0x3E, 0xFF, 0xFF, 0xFF, 0x3F, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, - 0x3B, 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, - 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, - 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, - 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, -}; - -uint8_t base64DecoderValue(uint8_t val) { - if (val < kStartValuesRemoved || val >= kStartValuesRemoved + kDecoderMapSize) - return 0xFF; - return g_FXBase64DecoderMap[val - kStartValuesRemoved]; -} - -void Base64DecodePiece(const char src[4], - int32_t iChars, - FX_BASE64DATA& dst, - int32_t& iBytes) { - ASSERT(iChars > 0 && iChars < 5); - iBytes = 1; - dst.data2 = base64DecoderValue(static_cast<uint8_t>(src[0])); - if (iChars > 1) { - uint8_t b = base64DecoderValue(static_cast<uint8_t>(src[1])); - dst.data1 = b >> 4; - dst.data4 = b; - if (iChars > 2) { - iBytes = 2; - b = base64DecoderValue(static_cast<uint8_t>(src[2])); - dst.data3 = b >> 2; - dst.data6 = b; - if (iChars > 3) { - iBytes = 3; - dst.data5 = base64DecoderValue(static_cast<uint8_t>(src[3])); - } else { - dst.data5 = 0; - } - } else { - dst.data3 = 0; - } - } else { - dst.data1 = 0; - } -} - -int32_t Base64DecodeW(const wchar_t* pSrc, int32_t iSrcLen, uint8_t* pDst) { - ASSERT(pSrc); - if (iSrcLen < 1) { - return 0; - } - while (iSrcLen > 0 && pSrc[iSrcLen - 1] == '=') { - iSrcLen--; - } - if (iSrcLen < 1) { - return 0; - } - if (!pDst) { - int32_t iDstLen = iSrcLen / 4 * 3; - iSrcLen %= 4; - if (iSrcLen == 1) { - iDstLen += 1; - } else if (iSrcLen == 2) { - iDstLen += 1; - } else if (iSrcLen == 3) { - iDstLen += 2; - } - return iDstLen; - } - char srcData[4]; - FX_BASE64DATA dstData; - int32_t iChars = 4, iBytes; - uint8_t* pDstEnd = pDst; - while (iSrcLen > 0) { - if (iSrcLen > 3) { - srcData[0] = (char)*pSrc++; - srcData[1] = (char)*pSrc++; - srcData[2] = (char)*pSrc++; - srcData[3] = (char)*pSrc++; - iSrcLen -= 4; - } else { - *((uint32_t*)&dstData) = 0; - *((uint32_t*)srcData) = 0; - srcData[0] = (char)*pSrc++; - if (iSrcLen > 1) { - srcData[1] = (char)*pSrc++; - } - if (iSrcLen > 2) { - srcData[2] = (char)*pSrc++; - } - iChars = iSrcLen; - iSrcLen = 0; - } - Base64DecodePiece(srcData, iChars, dstData, iBytes); - *pDstEnd++ = ((uint8_t*)&dstData)[0]; - if (iBytes > 1) { - *pDstEnd++ = ((uint8_t*)&dstData)[1]; - } - if (iBytes > 2) { - *pDstEnd++ = ((uint8_t*)&dstData)[2]; - } - } - return pDstEnd - pDst; -} - -} // namespace - CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocEnvironment* pDocEnvironment) : m_pDocEnvironment(pDocEnvironment), m_pApp(pApp) {} @@ -189,47 +68,6 @@ bool CXFA_FFDoc::ParseDoc(CPDF_Object* pElementXFA) { return true; } -bool XFA_GetPDFContentsFromPDFXML(CFX_XMLNode* pPDFElement, - uint8_t*& pByteBuffer, - int32_t& iBufferSize) { - CFX_XMLElement* pDocumentElement = nullptr; - for (CFX_XMLNode* pXMLNode = pPDFElement->GetFirstChild(); pXMLNode; - pXMLNode = pXMLNode->GetNextSibling()) { - if (pXMLNode->GetType() == FX_XMLNODE_Element) { - CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode); - WideString wsTagName = pXMLElement->GetName(); - if (wsTagName == L"document") { - pDocumentElement = pXMLElement; - break; - } - } - } - if (!pDocumentElement) { - return false; - } - CFX_XMLElement* pChunkElement = nullptr; - for (CFX_XMLNode* pXMLNode = pDocumentElement->GetFirstChild(); pXMLNode; - pXMLNode = pXMLNode->GetNextSibling()) { - if (pXMLNode->GetType() == FX_XMLNODE_Element) { - CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode); - WideString wsTagName = pXMLElement->GetName(); - if (wsTagName == L"chunk") { - pChunkElement = pXMLElement; - break; - } - } - } - if (!pChunkElement) { - return false; - } - WideString wsPDFContent = pChunkElement->GetTextData(); - iBufferSize = - Base64DecodeW(wsPDFContent.c_str(), wsPDFContent.GetLength(), nullptr); - pByteBuffer = FX_Alloc(uint8_t, iBufferSize + 1); - pByteBuffer[iBufferSize] = '0'; // FIXME: I bet this is wrong. - Base64DecodeW(wsPDFContent.c_str(), wsPDFContent.GetLength(), pByteBuffer); - return true; -} void XFA_XPDPacket_MergeRootNode(CXFA_Node* pOriginRoot, CXFA_Node* pNewRoot) { CXFA_Node* pChildNode = pNewRoot->GetFirstChild(); while (pChildNode) { |