Hello James,
could you try to compile and run the attached code on your machine? Just to make sure there aren't problems with glibc. I think I read something a time ago about problems with a SIGSEGV in vsnprintf on SMP linux.
Servus -- Alfred
--
Alfred Mickautsch
Schuler Business Solutions AG
Karl-Berner-Str. 4
D-72285 Pfalzgrafenweiler
tel: +49 (0)74 45 830-184
fax: +49 (0)74 45 830-349
e-mail: alfred mickautsch schuler-ag com
> -----Ursprüngliche Nachricht-----
> Von: xml-bounces gnome org [mailto:xml-bounces gnome org]Im
> Auftrag von
> James Eggleston
> Gesendet: Mittwoch, 14. September 2005 18:56
> An: xml gnome org
> Betreff: [xml] xmlTextWriterWriteFormatElement problem
>
>
> Hello,
>
> I've found a problem in our use of libxml2's streaming API.
> The call "xmlTextWriterWriteFormatElement" crashes when
> writing strings longer than 8191 bytes. It only happens on
> our dual - EM64T SuSE Enterprise 9.0 server... it seems fine
> on our single CPU 32 bit SLES machine (I tried using taskset
> to make the program stick to one CPU, but the program still
> crashed...). The default libxml2 is installed (2.6.7).
>
> The following program reproduces the problem on my machine:
>
> ==================xmlProblem.cpp===========
> #include <libxml/encoding.h>
> #include <libxml/xmlwriter.h>
>
> int main()
> {
> xmlTextWriterPtr writer;
> const char* xmlEncoding = "ISO-8859-1";
>
> writer = xmlNewTextWriterFilename("./test.xml", 0);
> int rc = xmlTextWriterStartDocument(writer, NULL,
> xmlEncoding, NULL);
>
> const int longStringLength(8192); // 8192 causes a seg
> fault...
> // const int longStringLength(8191); // 8191doesn't
> cause a problem!
> char* pLongString = new char[longStringLength];
> for (int i=0;i<longStringLength; i++)
> {
> pLongString[i] = 'a';
> }
> pLongString[longStringLength-1] = 0;
>
> // this will seg fault!!
> rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST
> "test", "%s", pLongString);
>
> return 0;
> }
> =====end of xmlProblem.cpp===================
>
> Compiling with "g++ xmlProblem.cpp -lxml2", and running
> causes a core dump... the back trace is:
>
> #0 0x0000002a95d2bd70 in strlen () from /lib64/tls/libc.so.6
> #1 0x0000002a95cffcdc in vfprintf () from /lib64/tls/libc.so.6
> #2 0x0000002a95d1f337 in vsnprintf () from /lib64/tls/libc.so.6
> #3 0x0000002a95735fc1 in xmlTextWriterVSprintf () from
> /usr/lib64/libxml2.so.2
> #4 0x0000002a95738e1e in xmlTextWriterWriteVFormatElement ()
> from /usr/lib64/libxml2.so.2
> #5 0x0000002a95738ee3 in xmlTextWriterWriteFormatElement ()
> from /usr/lib64/libxml2.so.2
> #6 0x000000000040096c in main ()
>
> Does anyone have any ideas why this is and if anything can be done?
>
> Thanks,
> James.
>
>
> ===========================================
> James Eggleston
>
> VEGA GmbH
> Hilperstrasse, 20A
> 64295 Darmstadt
> Germany
>
> Tel: 0049 6151 82570
> Tel (direct): 0049 6151 8257712
> Fax: 0049 6151 8257799
> ===========================================
> Notice of Confidentiality:
> This transmission is intended for the named addressee only.
> It contains information which may be confidential and which
> may also be privileged. Unless you are the named addressee
> (or authorised to receive it for the addressee) you may not
> copy or use it, or disclose it to anyone else. If you have
> received this transmission in error please notify the sender
> immediately.
> ===========================================
>
> _______________________________________________
> xml mailing list, project page http://xmlsoft.org/
> xml gnome org
> http://mail.gnome.org/mailman/listinfo/xml
>
Attachment:
test_vsnprintf.cpp
Description: test_vsnprintf.cpp