Bug #18376 Updated: After an abitrary number of nodes DOMXML dies on large XML documents

From: Date: Tue, 16 Jul 2002 20:15:12 +0000
Subject: Bug #18376 Updated: After an abitrary number of nodes DOMXML dies on large XML documents
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-14341@lists.php.net to get a copy of this message
ID: 18376 Updated by: jtate@php.net Reported By: watford@uiuc.edu -Status: Open +Status: Feedback Bug Type: DOM XML related Operating System: Windows 2000 Pro PHP Version: 4.2.1 New Comment: Can you try this with the current CVS snapshot available from http://snaps.php.net. Previous Comments: ------------------------------------------------------------------------ [2002-07-16 16:05:41] watford@uiuc.edu I got ahold of the register values at that point, but I can't get the contents of memory: EAX = 150082D0 EBX = 0060E6C0 ECX = 00000000 EDX = 14C0FAE4 ESI = 14C0FAB0 EDI = 0060E6C0 EIP = 006A6397 ESP = 14C0FAA0 EBP = 14C0FBB4 EFL = 00000202 CS = 001B DS = 0023 ES = 0023 SS = 0023 FS = 0038 GS = 0000 OV=0 UP=0 EI=1 PL=0 ZR=0 AC=0 PE=0 CY=0 150082DA = ???? ST0 = +0.00000000000000000e+0000 ST1 = +9.19248417784877260e+4083 ST2 = +0.00000000000000000e+0000 ST3 = +0.00000000000000000e+0000 ST4 = +0.00000000000000000e+0000 ST5 = +0.00000000000000000e+0000 ST6 = -6.14161125457030721e+0005 ST7 = 1#QNAN CTRL = 027F STAT = 4020 TAGS = FFFF EIP = 00C8D934 CS = 001B DS = 0023 EDO = 00CD1AC8 ------------------------------------------------------------------------ [2002-07-16 16:03:31] watford@uiuc.edu As another note it dies AFTER it sends the data to the browser, and after it outputs the data to STDOUT [if run via php.exe]. ------------------------------------------------------------------------ [2002-07-16 16:02:08] watford@uiuc.edu When I run my script that parses a DOMXML Object into smaller more managable objects, it will die on long XML documents [40+ elements] with the error: Unhanded exception in Apache.exe (PHP4TS.DLL): 0xC0000005: Access Violation. The Apache version is 2.0.36, and I have yet to try this with the 1.3.X branch of Apache. Here is the output from PHP4TS.DLL where it died: 006A6391 mov esi,dword ptr [esp+8] 006A6395 mov eax,dword ptr [esi] -> 006A6397 dec word ptr [eax+0Ah] 006A639B mov eax,dword ptr [esi] 006A639D mov cx,word ptr [eax+0Ah] 006A63A1 test cx,cx Here is my PHP Script: <?php class xmlNodeProperties { function xmlNodeProperties(/*void*/) { } /*String*/ function getAttribute(/*String*/ $key) { return $this->$key; } /*void*/ function setAttribute(/*String*/ $key, /*String*/ $val) { $this->$key = $val; } } class xmlNode extends xmlNodeProperties { var /*String*/ $nodeName; var /*String*/ $cdata; var /*xmlNode[]*/ $childNodes; function xmlNode(/*void*/) { $this->xmlNodeProperties(); } } class CXMLParser { var /*xmlNode*/ $root; function CXMLParser(/*void*/) { if(!$this->use_file) { /*domxmlTree*/ $t = xmltree($this->xml_str); $this->xml_str = ""; } else { /*domxmlTree*/ $t = xmltree(domxml_dump_mem(xmldocfile($this->file))); } $this->root = new xmlNode(); $this->root->cdata = $this->get_cdata($t->children[0]); $this->root->nodeName = $t->children[0]->tagname; foreach($t->children[0]->attributes as /*domxmlNode*/ $a) { $this->root->setAttribute($a->name, $a->value); } foreach($t->children[0]->children as /*domxmlNode*/ $c) { /*xmlNode*/ $n = $this->parse($c); if($n === false) { } else { $this->root->childNodes[] = $n; } } } /*xmlNode*/ function parse(/*domxmlNode*/ $domnode) { if($domnode->type != 1) return false; /*xmlNode*/ $node = new xmlNode(); $node->cdata = $this->get_cdata($domnode); $node->nodeName = $domnode->tagname; foreach($domnode->attributes as /*domxmlNode*/ $a) { $node->setAttribute($a->name, $a->value); } foreach($domnode->children as /*domxmlNode*/ $c) { /*xmlNode*/ $n = $this->parse($c); if($n === false) { } else { $node->childNodes[] = $n; } } return $node; } /*String*/ function get_cdata(/*domxmlNode*/ $node) { foreach($node->children as /*domxmlNode*/ $c) { if($c->type == 3) { return $c->content; } } return ""; } } class CXMLDocument extends CXMLParser { var /*String*/ $file; var /*String*/ $xml_str; var /*int*/ $use_file; function CXMLDocument(/*...*/) { /*Array*/ $arglist = func_get_args(); if( !count($arglist) ) { $this->xml_str = ""; $this->file = ""; $this->use_file = 0; } else if( count($arglist) < 2 ) { $this->xml_str = $arglist[0]; $this->file = ""; $this->use_file = 0; } else { $this->file = $arglist[0]; $this->use_file = $arglist[1]; if(file_exists($this->file)) { /*domxmlDocument*/ $d = domxml_open_file($this->file); if($d === false) { die("bad xml file"); } } else { die("bad file name or file does not exist"); } } $this->CXMLParser(); } } $xmlDoc = new CXMLDocument(' <columns> <date name="Adv_Plan">Advanced Planning Meeting</date> <date name="Rec_Pre_EUP">Receive Preliminary EUP</date> <date name="Start_Prel_FC">Start Preliminary Fuel Cycle</date> <date name="Send_Prel_FC">Send Preliminary Fuel Cycle</date> <date name="Rec_Rel_EUP">Receive Release EUP</date> <date name="Start_Rel_FC">Start Release Fuel Cycle</date> <date name="Send_Rel_FC" important="1">Send Release Fuel Cycle</date> <date name="Send_Start_Rep" important="1">Send Startup Report</date> <date name="Final_eWA">Final eWA</date> <date name="LicKickoff">Licensing Kickoff Meeting</date> <date name="Mini_Review">Mini Review</date> <date name="Send_Dft_FRED">Send Draft FRED</date> <date name="Send_Dft_OPL">Send Draft OPL</date> <date name="Rec_FRED">Receive Customer FRED</date> <date name="SEND_OPL" allcaps="1">Send Customer OPL3</date> <date name="Rec_OPL">Receive Customer OPL3</date> <date name="SEND_FRED" allcaps="1">Send Customer FRED</date> <date name="Download">Download to Manufacturing</date> <date name="RLP">RLP</date> <date name="SR1" important="1">SLMCPR</date> <date name="Send_Drf_SRLR">Send Draft SRLR</date> <date name="Rec_Comments_SRLR">Recieve Comments on SRLR</date> <date name="Send_Final_SRLR" important="1">Send Final SRLR</date> <date name="SEND_PREL_PCDB" allcaps="1">Send Preliminary PCDB</date> <date name="PCDB" important="1">Send Final PCDB</date> <date name="CMR" important="1">Send CMR</date> <date name="SEND_CMR1" allcaps="1">Send CMR Revision 1</date> <date name="SEND_CMR2" allcaps="1">Send CMR Revision 2</date> <date name="Rec_Cus_EOC">Receive Customer EOC Data</date> <date name="SR2">Special Requirements 1</date> <date name="SR3">Special Requirements 2</date> <date name="SR4">Special Requirements 3</date> <date name="SR5">Special Requirements 4</date> <date name="Eigen_Rev">Eigenvalue Review</date> <date name="FSDD">FSDD</date> <date name="Loca_TSD">LOCA TSD</date> <date name="Loca_Data">LOCA Interface Data</date> <date name="Loca_Start">Start LOCA Analysis</date> <date name="Loca_Fin">Complete LOCA Analysis</date> <date name="Stab_TSD">Stability TSD</date> <date name="Stab_Data">Stability Interface Data</date> <date name="Stab_Start">Start Stability Analysis</date> <date name="Stab_Fin">Complete Stability Analysis</date> <date name="Trans_TSD">Transient TSD</date> <date name="TRANS_DATA" allcaps="1">Transient Interface Data</date> <date name="Trans_Sel_Rev">Transient Selection Review</date> <date name="Trans_Start">Start Transient Analysis</date> <date name="Trans_Fin">Complete Transient Analysis</date> <date name="TRANS_WRAPUP" allcaps="1">Transient Wrapups</date> <date name="BNDL_REP" allcaps="1">Bundle Announcement Report</date> <date name="CMIT" allcaps="1">CMIT</date> <date name="SEND_OPL7" allcaps="1">Send OPL7</date> <date name="REC_OPL7" allcaps="1">Recieve Customer OPL7</date> <date name="RES_OPL7" allcaps="1">Resolved OPL7</date> <date name="SEND_OPL4" allcaps="1">Send Customer OPL4</date> <date name="REC_OPL4" allcaps="1">Receive Customer OPL4</date> </columns>'); ?> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=18376&edit=1

« previous php.bugs (#14341) next »