> I tested a little further, and learned that the stack overflow actually
> happens during Exception unwinding of an exception thrown by the
> RecursionGuard.
Just a stray thought: Thrown C++ exceptions live in their own memory area
(because their lifetime is different from the lifetime of the objects on the
stack that are destroyed). I don’t know at which point compilers actually
decide to free them – if that only happens after stack unwinding, I would not
be surprised if catching exceptions and throwing new ones in a sufficiently
deep recursion caused problems similar to this.
Also, I see a number of places in PoDoFo like this:
} catch (ArgParseException &e) {
throw ArgParseException(e.error(), toString());
}
Creating a new exception like that seems to me to defeat the whole non-slicing
purpose of catching by reference in the first place? Wouldn’t it be better if
ArgParseException had a setId(std::string const&) method and the catch clause
would call that and rethrow?
Just my €.02,
Christopher
The MathWorks GmbH | Weihenstephaner Str. 6 | 81673 Munich | District Court
Munich | HRB 290004 | Managing Directors: Bertrand Dissler, Steven D. Barbo,
Jeanne O‘Keefe
_______________________________________________
Podofo-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/podofo-users