AW: [xml] xmlTextWriterWriteFormatElement problem

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


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: 

#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 
      // 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/ 
#1 0x0000002a95cffcdc in vfprintf () from /lib64/tls/ 
#2 0x0000002a95d1f337 in vsnprintf () from /lib64/tls/ 
#3 0x0000002a95735fc1 in xmlTextWriterVSprintf () from 
#4 0x0000002a95738e1e in xmlTextWriterWriteVFormatElement () 
from /usr/lib64/ 
#5 0x0000002a95738ee3 in xmlTextWriterWriteFormatElement () 
from /usr/lib64/ 
#6 0x000000000040096c in main () 

Does anyone have any ideas why this is and if anything can be done? 


James Eggleston

Hilperstrasse, 20A
64295 Darmstadt

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

xml mailing list, project page
xml gnome org

Attachment: test_vsnprintf.cpp
Description: test_vsnprintf.cpp

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