[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [xml] interaction between xmlSetGenericErrorFunc and xmlSetStructuredErrorFunc can crash (draft patch available)
- From: Daniel Veillard <veillard redhat com>
- To: Wang Lam <wlam kosmix com>
- Cc: xml gnome org
- Subject: Re: [xml] interaction between xmlSetGenericErrorFunc and xmlSetStructuredErrorFunc can crash (draft patch available)
- Date: Wed, 29 Jul 2009 12:03:31 +0200
On Mon, Jul 27, 2009 at 08:05:37PM -0700, Wang Lam wrote:
>
> Hi! I came across some (unfortunate) behavior in libxml2 (2.7.3
> and head) error handling that I want to run by you for your comments.
> I have a patch that may help one aspect of it, if you are interested.
Yes, I am, sorry for the late reply, I was really busy lately.
[...]
> // 1
> Based on the API description and mailing-list messages--
>
> [Re: [xml] libxml error redirection]
> http://mail.gnome.org/archives/xml/2006-April/msg00090.html
>
> [Re: [xml] Error handling]
> http://mail.gnome.org/archives/xml/2005-May/msg00134.html
>
> --this function (xmlSetStructuredErrorFunc) seems to be the preferable
> way to capture errors.
yes
> (a) xmlGenericError still gets called, which seems surprising and
> unfortunate in light of the xmlSetStructuredErrorFunc call.
yes as you foudn out there is still many many calls internally to
xmlGenericError(), that should be cleaned up in some ways !
[...]
>
> (b) Worse than being invoked, though, the default xmlGenericError
> crashed (instead of, say, printing to stderr).
>
> From what I see, xmlGenericErrorFunc and xmlStructuredErrorFunc
> share a single xmlGenericErrorContext; setting one function
> overwrites the other function's context. In the above example
> code, the default xmlGenericErrorDefaultFunc expects its context
> to be a FILE * (or NULL, to default to stderr), and my custom
> xmlStructuredErrorFunc expects a pointer to a writable error-string
> buffer (for example).
>
> Locally, I work around the problem by writing both error-handling
> functions (and setting them both together) so that they can share
> one context. It's also possible, though, to create a separate
> void * xmlStructuredErrorContext so that the two functions don't
> have to fight over the same state.
yes, I agree with the diagnostic, I came up to the same conclusion,
this need fixing !
> With a patch to create xmlStructuredErrorContext, I get a different
> result from the above example code:
yes, I think I know what you patch does, add the new variable in
globals.c, initialize it properly, and use it for the strcutured
error paths in error.c
> While I'd naturally prefer (a) to be resolved, I don't know whether
> it is easy or not (whether anybody is able to go through the code
> to assert or verify its resolution). On the other hand, I do have
> a draft patch lying around (relative to libxml head) for (b).
I'm interested in the b) patch, that would avoid the need for me to
do the exact same thing !
> So, I wonder--
>
> * Are (a) and (b) behaviors that libxml2's maintainers would also
> like changed, or do they represent desired behavior for the system
> (e.g., the system is "supposed to" become undefined in // 2)?
I ideally would like to have both changed, but realistically right now
fixing b) might be sufficient.
> * Should I file a bug entry and submit my draft patch for (b) (to create
> a new void *xmlStructuredErrorContext)? (It's about 451 lines, so
> I don't have it attached to this already-long message, but as you'd
> quickly see, most of those lines are just side effects of libxml2's
> internal code generation.)
yes please or just reply with the attached patch, I expect to do
libxml2 maintainace today and tomorrow !
> Your thoughts or suggestions would be welcome. Thanks!
thanks a lot for the report and details, spot on !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel veillard com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]