Re: [xml] xmlParseMemory() and xmlParseDTD()



Daniel Veillard wrote:

On Wed, Mar 06, 2002 at 01:07:54PM +0100, MDC A. wrote:

 xmlParserError(0x160840, 0x122cf0, 0x1646c8, 0x0,
0x0, 0x164afd)


   xmlParserError calls the xmlGenericError routine which is initialized
to xmlGenericErrorDefaultFunc, with the default xmlGenericErrorContext which
is initialized to NULL.

  xmlGenericErrorDefaultFunc(0x0, 0x12fcf8, 0x5,
0xfffffff8,
0x44, 0x1646b8)


So that call is correct. BUT xmlGenericErrorDefaultFunc() code is:

---------------
void
xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
   va_list args;

   if (xmlGenericErrorContext == NULL)
        xmlGenericErrorContext = (void *) stderr;

   va_start(args, msg);
   vfprintf((FILE *)xmlGenericErrorContext, msg, args);
   va_end(args);
}
---------------

 Unless stderr == NULL in Solaris which would be really really strange,

vfprintf(0x0, 0xffbef0e4, 0xfeabf9b4, 0x8, 0x12fcf8,
0x1646c8)


 I really don't see how the first argument to vfprintf being passed can be
NULL !

which is the problem here?


 I really don't know there is something really really strange here !

How can the problem be solved?


 Take a debugger and check by single stepping, possibly looking at
the assembly generated. I don't understand how the first argument of the
call can be NULL ! Or someone else on Solaris can reproduce your problem
and check it for you, sorry I can't ...

Daniel

Hi,

To cut a long story short, I think this is a problem to do with the configure script. The linkage to -lpthread wasn't specified and so if your application was single threaded and you built libxml2 for multi-threaded use, failures of this nature would be caused.

This was fixed before I reported it, but I think that it was only fixed in 2.4.16.

You can check by seeing if libxml2.so is linked to -lpthread, e.g.:

bash-2.03$ ldd /usr/local/libxml/sparc/lib/libxml2.so
       libpthread.so.1 =>       /usr/lib/libpthread.so.1
       libz.so.1 =>     /usr/lib/libz.so.1
       libm.so.1 =>     /usr/lib/libm.so.1
       libsocket.so.1 =>        /usr/lib/libsocket.so.1
       libnsl.so.1 =>   /usr/lib/libnsl.so.1
       libc.so.1 =>     /usr/lib/libc.so.1
       libdl.so.1 =>    /usr/lib/libdl.so.1
       libmp.so.2 =>    /usr/lib/libmp.so.2
       libthread.so.1 =>        /usr/lib/libthread.so.1
       /usr/platform/SUNW,Ultra-60/lib/libc_psr.so.1
bash-2.03$

If it isn't linked to -lpthread, then it's broken for use with single threaded apps.

The easy answer is to upgrade your version of libxml2 to use the latest set of binaries that I ship from http://garypennington.net/libxml2/. Alternatively, if you use an older version of Solaris, download the source for 2.4.16 and build it.

Gary

--
Gary Pennington
Solaris Kernel Development,
Sun Microsystems
Gary Pennington sun com






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]