The fix is now in CVS:
cvs diff XSLTEngineImpl.cpp (in directory V:\xml-xalan\c\src\XSLT\)
Index: XSLTEngineImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp,v
retrieving revision 1.130
diff -r1.130 XSLTEngineImpl.cpp
403c403
< if (theFormatter != 0)
---
> if (theFormatter != 0 && theFormatter->getPrefixResolver() ==
0)
1375a1376,1377
> static const XalanDOMChar theDummy = 0;
>
1383c1385,1390
< const XalanDOMChar* const id = locator.getSystemId();
---
> const XalanDOMChar* id = locator.getSystemId();
>
> if (id == 0)
> {
> id = &theDummy;
> }
*****CVS exited normally with code 1*****
Dave
"Dimitry
Chernyshov" To:
<[email protected]>
<[EMAIL PROTECTED] cc: (bcc: David N
Bertoni/CAM/Lotus)
n.ru> Subject: RE: XalanC++
(Segmentation Fault)
01/22/2002 11:16
AM
Thanks, David!
The workaround works fine!
We're looking forward for the bug to be fixed.
Dimitry Chernyshov,
Technology Group Managing Director,
Polar Design
--------------------------
[EMAIL PROTECTED]
http://www.polardesign.com
phone/fax: +7 (095) 363 0708
-----Original Message-----
From: David N Bertoni/CAM/Lotus [mailto:[EMAIL PROTECTED]
Sent: Tuesday, January 22, 2002 9:09 PM
To: [email protected]
Subject: Re: XalanC++ (Segmentation Fault)
I've verified this as a problem. Can you please post a bug in Buzilla so
we can track this? There's an easy work-around in your code -- just set
the system ID for the input sources to a dummy value:
const XalanDOMString theSystemID("Stream input");
xml.setSystemId(c_wstr(theSystemID));
xsl.setSystemId(c_wstr(theSystemID));
Bugzilla:
http://nagoya.apache.org/bugzilla/
Thanks for reporting this!
Dave
"Victor S.
Popov" To:
<[email protected]>
<[EMAIL PROTECTED] cc:
ign.ru> Subject: XalanC++
(Segmentation Fault)
01/22/2002 08:54
AM
Please respond
to victor
Hi!
We are trying to use XalanC++ to transform XML to HTML. I've tried to use
string streams as input sources and got "Segmentation Fault" in case of
invalid XSL-source by the means of structure, i.e. no exception was thrown.
Nevertheless when I use files with the same sources (invalid XSL) instead
of
streams, it works - transformer treats the error normally. Here is the code
of prototype:
XML:
<?xml version="1.0"?>
<document attribute="Test"/>
XSL:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:value-of select="."/> <!-- structural trap -->
<xsl:template match="/">
<html><body>Test</body></html>
</xsl:template>
</xsl:stylesheet>
CODE:
{
istrstream xml_stream (xml_text, strlen (xml_text));
istrstream xsl_stream (xsl_text, strlen (xsl_text));
XalanTransformer xalan;
XSLTInputSource xml (& xml_stream /* "xml.xml" */);
XSLTInputSource xsl (& xsl_stream /* "xsl.xsl" */);
XSLTResultTarget output (cout);
try {
if (xalan.transform(xml, xsl, output) != 0)
cout << xalan.getLastError () << endl;
} catch (...) {
cout << "ERROR";
};
}
BT:
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libstdc++-libc6.1-1.so.2...done.
Reading symbols from /usr/local/lib/libxalan-c1_3.so...done.
Reading symbols from /usr/local/lib/libxerces-c1_6_0.so...done.
Reading symbols from /lib/libc.so.6...done.
Reading symbols from /lib/libm.so.6...done.
Reading symbols from /lib/libpthread.so.0...done.
Reading symbols from /lib/ld-linux.so.2...done.
#0 0x401abde6 in XalanDOMString::XalanDOMString () from
/usr/local/lib/libxalan-c1_3.so
(gdb) bt
#0 0x401abde6 in XalanDOMString::XalanDOMString () from
/usr/local/lib/libxalan-c1_3.so
#1 0x403560ec in XSLTEngineImpl::problem () from
/usr/local/lib/libxalan-c1_3.so
#2 0x403565b3 in XSLTEngineImpl::error () from
/usr/local/lib/libxalan-c1_3.so
#3 0x403276c2 in StylesheetConstructionContextDefault::error () from
/usr/local/lib/libxalan-c1_3.so
#4 0x4034042e in StylesheetHandler::error () from
/usr/local/lib/libxalan-c1_3.so
#5 0x40336776 in StylesheetHandler::processTopLevelElement () from
/usr/local/lib/libxalan-c1_3.so
#6 0x403336d6 in StylesheetHandler::startElement () from
/usr/local/lib/libxalan-c1_3.so
#7 0x40647e54 in SAXParser::startElement () from
/usr/local/lib/libxerces-c1_6_0.so
#8 0x40693c10 in XMLScanner::scanStartTag () from
/usr/local/lib/libxerces-c1_6_0.so
#9 0x40691a7e in XMLScanner::scanContent () from
/usr/local/lib/libxerces-c1_6_0.so
#10 0x4068f31d in XMLScanner::scanDocument () from
/usr/local/lib/libxerces-c1_6_0.so
#11 0x40647038 in SAXParser::parse () from
/usr/local/lib/libxerces-c1_6_0.so
#12 0x4037b66f in XercesParserLiaison::parseXMLStream () from
/usr/local/lib/libxalan-c1_3.so
#13 0x401dcecd in XalanSourceTreeParserLiaison::parseXMLStream () from
/usr/local/lib/libxalan-c1_3.so
#14 0x403506d4 in XSLTEngineImpl::processStylesheet () from
/usr/local/lib/libxalan-c1_3.so
#15 0x4034e2cb in XSLTEngineImpl::process () from
/usr/local/lib/libxalan-c1_3.so
#16 0x40382667 in XalanTransformer::transform () from
/usr/local/lib/libxalan-c1_3.so
#17 0x403841bd in XalanTransformer::transform () from
/usr/local/lib/libxalan-c1_3.so
#18 0x80495e0 in main (argc=1) at StreamTransform.cpp:95
Thanks,
Victor Popov