File r1920-ADDED-Cycle-detection-for-XRef-tables.patch of Package podofo.34526
------------------------------------------------------------------------
r1920 | domseichter | 2018-04-14 09:45:49 +0200 (sáb, 14 abr 2018) | 1 line
ADDED: Cycle detection for XRef tables.
Index: src/base/PdfParser.cpp
===================================================================
--- src/base/PdfParser.cpp (revision 1919)
+++ src/base/PdfParser.cpp (revision 1920)
@@ -645,6 +645,20 @@
long long nFirstObject = 0;
long long nNumObjects = 0;
+ if( m_visitedXRefOffsets.find( lOffset ) != m_visitedXRefOffsets.end() )
+ {
+ std::ostringstream oss;
+ oss << "Cycle in xref structure. Offset "
+ << lOffset << " already visited.";
+
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidXRef, oss.str() );
+ }
+ else
+ {
+ m_visitedXRefOffsets.insert( lOffset );
+ }
+
+
size_t curPosition = m_device.Device()->Tell();
m_device.Device()->Seek(0,std::ios_base::end);
std::streamoff fileSize = m_device.Device()->Tell();
Index: src/base/PdfParser.h
===================================================================
--- src/base/PdfParser.h (revision 1919)
+++ src/base/PdfParser.h (revision 1920)
@@ -594,6 +594,8 @@
int m_nReadNextTrailerLevel;
static long s_nMaxObjects;
+
+ std::set<pdf_long> m_visitedXRefOffsets;
};
// -----------------------------------------------------
------------------------------------------------------------------------