[
https://issues.apache.org/jira/browse/XERCESC-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alberto Massari resolved XERCESC-1804.
--------------------------------------
Resolution: Fixed
Fix Version/s: 3.0.0
Assignee: Alberto Massari
Fix is in SVN
> Infinite loop during serialization when using xinclude with pretty printing
> and fallback elements
> -------------------------------------------------------------------------------------------------
>
> Key: XERCESC-1804
> URL: https://issues.apache.org/jira/browse/XERCESC-1804
> Project: Xerces-C++
> Issue Type: Bug
> Components: XInclude
> Affects Versions: 3.0.0
> Environment: Debian GNU/Linux 4.0 (Etch), g++ (GCC) 4.1.2 20061115
> (prerelease) (Debian 4.1.1-21)
> Reporter: Michael Weitzel
> Assignee: Alberto Massari
> Fix For: 3.0.0
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> Serialization of a DOM tree containing unresolved XInclude elements with
> fallback causes an infinite loop when pretty printing is turned on. The
> output file written during the loop contains xml data followed by spaces
> (0x20). The infinite loop seems to occur in
> xercesc_3_0::DOMLSSerializerImpl::printIndent (this=0x809fa30,
> level=4294967294)
> at xercesc/dom/impl/DOMLSSerializerImpl.cpp:1625
> 1625 for(unsigned int i = 0; i < level; i++)
> (gdb) print i
> $1 = 10477649
> unsigned int level seems to be initialized with "-1". The following program
> can be tried to reproduce the bug:
> ===example code===
> #include <xercesc/util/XMLUniDefs.hpp>
> #include <xercesc/dom/DOM.hpp>
> #include <xercesc/framework/LocalFileFormatTarget.hpp>
> XERCES_CPP_NAMESPACE_USE
> int main()
> {
> XMLPlatformUtils::Initialize();
> XMLCh utf_LS[] = { chLatin_L, chLatin_S, chNull };
> DOMImplementation * impl =
> DOMImplementationRegistry::getDOMImplementation(utf_LS);
> DOMLSParser * parser = ((DOMImplementationLS*)impl)->createLSParser(
> DOMImplementationLS::MODE_SYNCHRONOUS, 0
> );
>
> // otherwise the bug does not occur:
> DOMConfiguration * config = parser->getDomConfig();
> config->setParameter(XMLUni::fgXercesDoXInclude, true);
> config->setParameter(XMLUni::fgDOMNamespaces, true);
> DOMDocument * doc = parser->parseURI("mini.xml");
> DOMLSSerializer * theSerializer =
> ((DOMImplementationLS*)impl)->createLSSerializer();
> DOMLSOutput * theOutput =
> ((DOMImplementationLS*)impl)->createLSOutput();
> // also a precondition for the bug:
> config = theSerializer->getDomConfig();
> config->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);
> XMLFormatTarget * myFormatTarget = new LocalFileFormatTarget("out.xml");
> theOutput->setByteStream(myFormatTarget);
> theSerializer->write(doc, theOutput);
> parser->release();
> XMLPlatformUtils::Terminate();
> return 0;
> }
> =================
> Please use the following xml file for debugging. It's important that the
> included file does not exist so that the fallback elements are used:
> ===example data mini.xml===
> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
> <mini>
> <xi:include href="does-not-exist.xml"
> xmlns:xi="http://www.w3.org/2001/XInclude">
> <!-- the bug requires a fallback element: -->
> <xi:fallback xmlns:xi="http://www.w3.org/2001/XInclude">
> <test/>
> </xi:fallback>
> </xi:include>
> </mini>
> ================
> Cheers, Michael
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]