FYI it seems none of your messages made it to the Xerces c-dev mailing list:
https://mail-archives.apache.org/mod_mbox/xerces-c-dev/202001.mbox/browser

Are you still working on a patch?

- Sylvain

On 30/01/2020 09:16, Ola Lundqvist wrote:
> Hi
>
> Yes you answered my questions. Please go ahead to prepare a patch.
>
> / Ola
>
> Den tors 30 jan. 2020 09:09Hugo Lefeuvre <h...@owl.eu.com
> <mailto:h...@owl.eu.com>> skrev:
>
>     Hi Ola,
>
>     > > A DTDEntityDecl object is allocated and pushed into the
>     ReaderMgr stack.
>     > > ReaderMgr does not own the stack's content, so objects neither
>     get freed on
>     > > ReaderMgr::popReader(), nor on ReaderMgr::~ReaderMgr().
>     >
>     > And it should not be freed by the code popping the object?
>
>     I don't think so. In fact, the code popping the object is the
>     ReaderMgr
>     itself: popReader is a private method called by a higher level
>     scanning
>     API, e.g. ReaderMgr::getNextChar.
>
>         $ ag popReader
>         src/xercesc/internal/ReaderMgr.cpp
>         107:    if (!popReader())
>         129:        if (!popReader())
>         149:        if (!popReader())
>         166:    if (!popReader())
>         191:        if (!popReader())
>         214:        if (!popReader())
>         237:        if (!popReader())
>         256:        if (!popReader())
>         273:        if (!popReader())
>         1056:bool ReaderMgr::popReader()
>
>         src/xercesc/internal/ReaderMgr.hpp
>         203:    bool popReader();
>
>     > > A janitor is set to avoid leaking memory via the allocated
>     DTDEntityDecl.
>     > > Unfortunately the object is freed when the janitor gets out of
>     scope, at
>     > > which point a pointer to this object is still present within
>     the stack.
>     >
>     > Do you mean that the janitor should not free it at this point?
>
>     Exactly. This is too early!
>
>     > <snip>
>     > # I suggest the following fix:
>     > >
>     > > Add a `bool adopt` parameter to ReaderMgr::pushReader()
>     (default value of
>     > > false), and a `RefStackOf<XMLEntityDecl>* fAdoptedStack`
>     private element to
>     > > the ReaderMgr class.
>     > >
>     > > Whenever ReaderMgr::pushReader() is called with `adopt` set to
>     true, also
>     > > push passed object onto `fAdoptedStack`.
>     > >
>     > > Whenever ReaderMgr::popReader() is called, check whether the
>     object being
>     > > removed is on top of `fAdoptedStack`. If so, remove and delete it.
>     > >
>     > > On ReaderMgr::~ReaderMgr(), delete `fAdoptedStack` and all
>     possibly
>     > > remaining elements.
>     > >
>     >
>     > I assume that you also remove the janitor in this case?
>
>     Yes!
>
>     Thanks for having a look. Did I manage to answer your questions?
>     If so, I'd
>     go on, implement the patch and try to get some review from upstream.
>
>     BTW, I don't think previous messages reached the c-dev mailing list. I
>     tried to subscribe, let's see if this one does.
>
>     FTR: initial message here[0].
>
>     cheers,
>     Hugo
>
>     [0] https://lists.debian.org/debian-lts/2020/01/msg00055.html
>
>     -- 
>                     Hugo Lefeuvre (hle)    |    www.owl.eu.com
>     <http://www.owl.eu.com>
>     RSA4096_ 360B 03B3 BF27 4F4D 7A3F D5E8 14AA 1EB8 A247 3DFD
>     ed25519_ 37B2 6D38 0B25 B8A2 6B9F 3A65 A36F 5357 5F2D DC4C
>

Reply via email to