DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24693>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24693 DOMNode::getTextContent() corrupts heap Summary: DOMNode::getTextContent() corrupts heap Product: Xerces-C++ Version: 2.3.0 Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Major Priority: Other Component: DOM AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The following code (Win32 console app) crashes with attached XML (please don't change anything in XML to be able to reproduce) if _REPRODUCEBUG defined In debug mode: Damage: after Normal block (#1321) at 0x005C73D0 Code ================================================================================ // Bug.cpp : Defines the entry point for the console application. // #include <string> #include <fstream> #include <xercesc/dom/DOM.hpp> #include <xercesc/parsers/XercesDOMParser.hpp> #include <xercesc/framework/MemBufInputSource.hpp> XERCES_CPP_NAMESPACE_USE #include <xercesc/util/PlatformUtils.hpp> using namespace std; string readFile(const char *fName) { char buf[512]; string xml; std::ifstream stream(fName); if (stream.good()) while (!stream.eof()) { stream.read(buf, sizeof buf); unsigned cnt = stream.gcount(); if (cnt > sizeof buf) cnt = sizeof buf; //remove ends of lines for (char *p = buf; p < buf + cnt; p++) if (*p != '\n' && *p != '\r' && *p != '\t') xml.append(1, *p); } return xml; } #define _REPRODUCEBUG void parse(const char * xml_) { XMLPlatformUtils::Initialize(); XercesDOMParser parser; MemBufInputSource memBufIS((const XMLByte*)xml_, strlen (xml_), "BufferId", false); parser.parse(memBufIS); DOMDocument *pDoc = parser.getDocument(); DOMElement *pRoot = pDoc->getDocumentElement(); DOMNode *pNode, *pChild; DOMNodeList *pList; pList = pRoot->getElementsByTagName (L"Parameters"); pNode = pList->item(0)->getFirstChild(); while (pNode != 0) { const XMLCh *name = pNode->getNodeName(); if (XMLString::compareIString(name, L"Object1234567890") == 0) { pChild = pNode->getFirstChild(); pList = ((DOMElement *)pChild)->getElementsByTagName (L"Points"); DOMNode *pNd = pList->item(0)->getFirstChild(); while (pNd != 0) { if (XMLString::compareIString(pNd->getNodeName (), L"Point") == 0) { const XMLCh *p; pChild = pNd->getFirstChild(); while (pChild != 0) { const XMLCh *name = pChild- >getNodeName(); if (XMLString::compareIString (name, L"CoordX") == 0) { #ifdef _REPRODUCEBUG p = pChild- >getTextContent(); #else DOMNode *pN = pChild- >getFirstChild(); p = ((DOMCharacterData*) pN)->getData(); #endif } else if (XMLString::compareIString(name, L"CoordY") == 0) { #ifdef _REPRODUCEBUG p = pChild- >getTextContent(); #else DOMNode *pN = pChild- >getFirstChild(); p = ((DOMCharacterData*) pN)->getData(); #endif } pChild = pChild - >getNextSibling(); } } pNd = pNd->getNextSibling(); } } pNode = pNode->getNextSibling(); } } int main() { string xml = readFile("c:\\Bug\\Test.xml"); parse(xml.c_str()); // RequestData reqData; // reqData.parseRequestXML(xml); return 0; } XML ================================================================================ <ExampleRequest function="GenericExampleRequest"> <Parameters> <Option1 type="boolean" value="false"/> <Option2 type="boolean" value="false"/> <Option3 type="boolean" value="false"/> <Option4 type="boolean" value="true"/> <Date1 type="date" value="20031103"/> <Date2 type="date" value="20031103"/> <ObjectId type="integer" value="237080"/> <Object1234567890 type="object"> <Obj> <Header> <StringParameter type="string">SomeString</StringParameter> </Header> <Parameters> <Param1 type="string">abcdefg</Param1> <Param2 type="integer">4</Param2> <Param3 type="doubld">0.25</Param3> </Parameters> <Points> <Point> <CoordX type="double">0.25</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">0.5</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">0.75</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">1</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">2</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">3</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">4</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">5</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">7</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">10</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">15</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">20</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">30</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> </Points> </Obj> </Object1234567890> <SecondObject type="object"> <SomeType Identity="1747" ProtectionValue="-122400000" TheVeryFirstDateStringqwertyu="20110314" StringParameter="qwerty" StringParameter2="official@/curve.swap/ldnclose/eur/mid/libor" StringParameter3="3B" StringParameter4="NewYork" StringParameter5="Chicago" StringParameter6="Normal"> <ScheduleData Param1="2" Param2="asdfgh" Param3="Back" Date1="20010314" Date2="20010914" Date3="20110314" Value1="Following" Value2="14" OptionA="false" OptionB="true"/> <AssetData> <AssetName> <ScheduleABCDEFG> <Item Date="20030815" Value="102000000"/> <Item Date="20040215" Value="102000000"/> <Item Date="20040815" Value="102000000"/> <Item Date="20050215" Value="102000000"/> <Item Date="20050815" Value="102000000"/> <Item Date="20060215" Value="102000000"/> <Item Date="20060815" Value="102000000"/> <Item Date="20070215" Value="102000000"/> <Item Date="20070815" Value="102000000"/> <Item Date="20080215" Value="102000000"/> <Item Date="20080815" Value="102000000"/> <Item Date="20090215" Value="97882579.4604201"/> <Item Date="20090815" Value="49882579.4604201"/> <Item Date="20100215" Value="30882579.4604201"/> <Item Date="20100815" Value="15882579.4604201"/> <Item Date="20110215" Value="0"/> <Item Date="20110815" Value="0"/> <Item Date="20120215" Value="0"/> <Item Date="20120815" Value="0"/> <Item Date="20130215" Value="0"/> <Item Date="20130815" Value="0"/> <Item Date="20140215" Value="0"/> <Item Date="20140815" Value="0"/> <Item Date="20150215" Value="0"/> <Item Date="20150815" Value="0"/> <Item Date="20160215" Value="0"/> <Item Date="20160815" Value="0"/> <Item Date="20170215" Value="0"/> <Item Date="20170815" Value="0"/> <Item Date="20180215" Value="0"/> <Item Date="20180815" Value="0"/> <Item Date="20190215" Value="0"/> <Item Date="20190815" Value="0"/> <Item Date="20200215" Value="0"/> <Item Date="20200815" Value="0"/> <Item Date="20210215" Value="0"/> <Item Date="20210815" Value="0"/> <Item Date="20220215" Value="0"/> <Item Date="20220815" Value="0"/> <Item Date="20230215" Value="0"/> <Item Date="20230815" Value="0"/> <Item Date="20240215" Value="0"/> <Item Date="20240815" Value="0"/> <Item Date="20250215" Value="0"/> <Item Date="20250815" Value="0"/> <Item Date="20260215" Value="0"/> <Item Date="20260815" Value="0"/> <Item Date="20270215" Value="0"/> <Item Date="20270815" Value="0"/> <Item Date="20280215" Value="0"/> <Item Date="20280815" Value="0"/> <Item Date="20290215" Value="0"/> <Item Date="20290815" Value="0"/> </ScheduleABCDEFG> <Schedule1234567688> <Item Date="20010201" Value="1"/> </Schedule1234567688> </AssetName> </AssetData> <AdditionalData DoubleValue="3.141592"/> </SomeType> </SecondObject> <ThirdObjectId type="integer" value="237080"/> <ThirdObjectABCDEFG type="object"> <Obj> <Header> <StringParameter type="string">SomeString</StringParameter> </Header> <Parameters> <Param1 type="string">abcdefg</Param1> <Param2 type="integer">4</Param2> <Param3 type="doubld">0.25</Param3> </Parameters> <Points> <Point> <CoordX type="double">0.25</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">0.5</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">0.75</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">1</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">2</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">3</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">4</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">5</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">7</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">10</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">15</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">20</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> <Point> <CoordX type="double">30</CoordX> <CoordY type="double">3.01365883792156E-02</CoordY> </Point> </Points> </Obj> </ThirdObjectABCDEFG> </Parameters> </ExampleRequest> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
