diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp index bd21fdbdf7..9c5cf27efd 100644 --- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp +++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp @@ -976,6 +976,8 @@ bool GetFromBase64(const std::wstring& sPath, BYTE** pBuffer, int* nBufferLen) if (!NSBase64::Base64Decode((const char*)pFileContent, dwFileSize, *pBuffer, nBufferLen)) return false; } + else + return false; oFile.CloseFile(); return true; } @@ -1137,7 +1139,7 @@ int main(int argc, char* argv[]) BYTE* pColor = new BYTE[12] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // REDACT - if (true) + if (false) { int pRect[4] = { 307499, 217499, 1799999, 1124999 }; if (!RedactPage(pGrFile, nTestPage, pRect, 1, pColor, 12)) diff --git a/PdfFile/SrcWriter/Objects.cpp b/PdfFile/SrcWriter/Objects.cpp index f511e66667..3f8d014a71 100644 --- a/PdfFile/SrcWriter/Objects.cpp +++ b/PdfFile/SrcWriter/Objects.cpp @@ -859,6 +859,37 @@ namespace PdfWriter return NULL; } + void CXref::Add(CObjectBase* pObject) + { + if (!pObject) + return; + + if (pObject->IsDirect() || pObject->IsIndirect()) + return; + + if (m_arrEntries.size() >= LIMIT_MAX_XREF_ELEMENT) + { + RELEASE_OBJECT(pObject); + return; + } + + // В случае ошибки r объектe нужно применить dispose + TXrefEntry* pEntry = new TXrefEntry; + if (NULL == pEntry) + { + RELEASE_OBJECT(pObject); + return; + } + + m_arrEntries.push_back(pEntry); + + pEntry->nEntryType = IN_USE_ENTRY; + pEntry->unByteOffset = 0; + pEntry->unGenNo = 0; + pEntry->pObject = pObject; + pObject->SetIndirect(); + pObject->SetXrefEntry(pEntry); + } void CXref::Add(CObjectBase* pObject, unsigned int unObjectGen) { if (!pObject) @@ -887,7 +918,7 @@ namespace PdfWriter pEntry->unByteOffset = 0; pEntry->unGenNo = unObjectGen; pEntry->pObject = pObject; - pObject->SetRef(0, pEntry->unGenNo); + pObject->SetRef(m_unStartOffset + m_arrEntries.size() - 1, pEntry->unGenNo); pObject->SetIndirect(); pObject->SetXrefEntry(pEntry); } diff --git a/PdfFile/SrcWriter/Objects.h b/PdfFile/SrcWriter/Objects.h index 8ab7736fd4..ed57b8803f 100644 --- a/PdfFile/SrcWriter/Objects.h +++ b/PdfFile/SrcWriter/Objects.h @@ -518,7 +518,8 @@ namespace PdfWriter TXrefEntry* GetEntry(unsigned int unIndex) const; TXrefEntry* GetEntryByObjectId(unsigned int unObjectId) const; CXref* GetXrefByObjectId(unsigned int unObjectId); - void Add(CObjectBase* pObject, unsigned int unObjectGen = 0); + void Add(CObjectBase* pObject); + void Add(CObjectBase* pObject, unsigned int unObjectGen); void Remove(CObjectBase* pObject); void WriteToStream(CStream* pStream, CEncrypt* pEncrypt, bool bStream = false); void SetPrev(CXref* pPrev)