On Thu, Nov 25, 2021 at 4:58 PM Christopher Creutzig <ccreu...@mathworks.com> wrote:
> > Ok, I can submit a patch which uses C++11 thread_local when > > PODOFO_MULTI_THREAD > is defined. The recursion guard definition will look like this: > > > > > > #if defined(PODOFO_MULTI_THREAD) > > > static int thread_local s_nRecursionDepth; // PoDoFo with threading > support requires C++11 compiler with thread_local > > > #else > > > static int s_nRecursionDepth; // PoDoFo is single threaded > > > #endif > > > > > > Does that work for everyone? > > > > Looks good to me, and the comment is hopefully explanation enough if > anyone runs into a compile time error. Please do include a doc patch > stating the requirement. > > > > Can we get a macro that creates this thread-local integer and the > recursion guard object all in one go, with the connotation that the > recursion guard is meant to usually be applied to each affected function > entry point separately? (Unless that is not what it is meant to do. I think > we could just as well make an argument for a single recursion depth counter > per thread, which then probably should become a static member of the > recursion guard class.) > > I think that it was meant that there will be just a single recursion counter per thread. > > > > Cheers, > > Christopher > > > > The MathWorks GmbH | Friedlandstr.18 | 52064 Aachen | District Court > Aachen | HRB 8082 | Managing Directors: Bertrand Dissler, Steven D. Barbo, > Jeanne O’Keefe > > > > > > > > *From:* Mark Rogers <mark.rog...@powermapper.com> > *Sent:* Thursday, November 25, 2021 16:33 > *To:* Christopher Creutzig <ccreu...@mathworks.com>; Michal Sudolsky < > sudols...@gmail.com> > *Cc:* podofo-users@lists.sourceforge.net > *Subject:* Re: [Podofo-users] PoDoFo and recursive stack consumption CVEs > > > > >>> I like this idea. As PODOFO_MULTI_THREAD will enable C++11 > > >>Is there a chance we might get there? Who would be able to make that > decision? > > >consider the decision being made. Again, from my point of view. In > > >other words, feel free to provide a patch with the suggested changes. > > > > Ok, I can submit a patch which uses C++11 thread_local when > PODOFO_MULTI_THREAD > is defined. The recursion guard definition will look like this: > > > > #if defined(PODOFO_MULTI_THREAD) > > static int thread_local s_nRecursionDepth; // PoDoFo with threading > support requires C++11 compiler with thread_local > > #else > > static int s_nRecursionDepth; // PoDoFo is single threaded > > #endif > > > > Does that work for everyone? > > > > > Not when the user of podofo already used some 64 KB before calling > podofo. To me it seems more reasonable to use a more conservative value > which would not consume more than some half (or tenth?) of the available > stack in the worst case. > > > > I’ll also reduce the 500 max recursion depth as suggested (probably to 256) > > > > And I’ll also include the new parser unit tests which test for deep > recursion and reference loops > > > > We’re also testing a patch for CVE-2018-20797. This is caused by an > invalid negative value for one of the FlateDecode compression parameters > which results in a call to podofo_calloc( -14 ) == podofo_calloc( > 0xfffffffffffffff2 ) > > > > Best Regards > > Mark > > > > Mark Rogers - mark.rog...@powermapper.com > > PowerMapper Software Ltd - www.powermapper.com > > Registered in Scotland No 362274 Quartermile 2 Edinburgh EH3 9GL > > > > > > > > *From: *Christopher Creutzig <ccreu...@mathworks.com> > *Date: *Thursday, 25 November 2021 at 07:16 > *To: *Michal Sudolsky <sudols...@gmail.com> > *Cc: *"PowerMapper.com" <mark.rog...@powermapper.com>, " > podofo-users@lists.sourceforge.net" <podofo-users@lists.sourceforge.net> > *Subject: *RE: [Podofo-users] PoDoFo and recursive stack consumption CVEs > > > > >> If we want to avoid UB in the multithreaded world, I’m afraid we will > have to make a C++11 compiler a requirement, as C++03 never acknowledged > the existence of threads. (That is not limited to this place, a lot of > methods like PdfEncodingFactory::GlobalPdfRomanEncodingInstance are not > currently threadsafe in C++03, as discussed earlier.) > > > That is not thread-safe even in C++11. > > > > True, but C++11 or later would give us the tools to make it thread-safe. > > > > > Except that some things are not so available as threads like for > example thread_local and atomic operations. > > > > thread_local equivalents are available for g++, clang, and MSVC. That > covers the compilers listed in > https://github.com/NickNaso/PoDoFo/blob/master/README.md#installation_with_cmake. > See my proposed PODOFO_THREAD_LOCAL in > https://sourceforge.net/p/podofo/mailman/message/37389082/. > > > > > I like this idea. As PODOFO_MULTI_THREAD will enable C++11 > > > > Is there a chance we might get there? Who would be able to make that > decision? > > > > > > Cheers, > > Christopher > > > > The MathWorks GmbH | Friedlandstr.18 | 52064 Aachen | District Court > Aachen | HRB 8082 | Managing Directors: Bertrand Dissler, Steven D. Barbo, > Jeanne O’Keefe > > > _______________________________________________ > Podofo-users mailing list > Podofo-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/podofo-users >
_______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users