Hi

VeraPDF enforces the 8,388,607 indirect object limit:
https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-6112-7

This answer on Adobe.com expands on the reason for the limit:
https://forums.adobe.com/thread/1041350 (Adobe Reader can’t load files with 
more than 8,388,607 indirect objects)

This patch just changes the default – a PoDoFo library user can accept the risk 
of uncontrolled memory allocation and restore the previous max limit by calling 
PoDoFo::PdfParser::SetMaxObjectCount( std::numeric_limits<long>::max() )

With the 8,388,607 object count limit the maximum number of entries in 
m_offsets is 8,388,607 which uses this amount of memory for m_offsets:
32-bit: 8,388,607 * sizeof(PoDoFo::PdfParser::TXRefEntry) = 8,388,607 * 16 = 
134 MB
64-bit: 8,388,607 * sizeof(PoDoFo::PdfParser::TXRefEntry) = 8,388,607 * 24 = 
201 MB

With the current object count limit (2**31 on 32-bit systems and 2**63 on 
64-bit systems) then the maximum number of entries in m_offsets is less than 
this because m_offsets.max_size() = std::numeric_limits<size_t>::max() / 
sizeof(PoDoFo::PdfParser::TXRefEntry) which is:

32-bit: std::numeric_limits<size_t>::max() / 
sizeof(PoDoFo::PdfParser::TXRefEntry) = 2**32 / 16 = 268,435,456 (requires 
entire 32-bit address space)
64-bit: std::numeric_limits<size_t>::max() / 
sizeof(PoDoFo::PdfParser::TXRefEntry) = 2 **64 / 24 = 7.6 x 10e17 (requires 
entire 64-bit address space)

Related: I don’t think PoDoFo checks the maximum number of objects when writing 
so it can produce PDFs that Adobe Reader can’t read.

Best Regards
Mark

--
Mark Rogers - mark.rog...@powermapper.com<mailto:mark.rog...@powermapper.com>
PowerMapper Software Ltd - www.powermapper.com
Registered in Scotland No 362274 Quartermile 2 Edinburgh EH3 9GL



Hello Mark, hello all,



> On 15 April 2018 at 22:06 Mark Rogers <mark.rogers@...> wrote:

>

>

> Hi

>

>

> Here’s a simple patch for CVE-2018-5296 – it reduces the limit returned

> by GetMaxObjectCount from std::numeric_limits::max() to 8,388,607 which

> is the limit for for the maximum number of indirect objects specified

> in Table C.1 in Appendix C.2 Architectural Limits in PDF 32000-1:2008

>

the standard says there the limits are 32-bit systems whereas PoDoFo

uses 64-bit types in many places, therefore I'm feeling a bit uneasy

with the patch: Can anyone please shed some more light on this issue?



>

> Best Regards

>

>

> Mark

>

Best regards, mabri



From: Mark Rogers <mark.rog...@powermapper.com>
Date: Sunday, 15 April 2018 at 21:06
To: "podofo-users@lists.sourceforge.net" <podofo-users@lists.sourceforge.net>
Subject: [Podofo-users] [PATCH] PoFoFo: fix CVE-2018-5296 by reducing limit in 
s_nMaxObjects

Hi

Here’s a simple patch for CVE-2018-5296 – it reduces the limit returned by 
GetMaxObjectCount from std::numeric_limits<long>::max() to 8,388,607 which is 
the limit for for the maximum number of indirect objects specified in Table C.1 
in Appendix C.2 Architectural Limits in PDF 32000-1:2008

Best Regards
Mark

--
Mark Rogers - mark.rog...@powermapper.com<mailto:mark.rog...@powermapper.com>
PowerMapper Software Ltd - www.powermapper.com
Registered in Scotland No 362274 Quartermile 2 Edinburgh EH3 9GL

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users

Reply via email to