Edit report at http://bugs.php.net/bug.php?id=53569&edit=1
ID: 53569
User updated by: chris dot richard at gmail dot com
Reported by: chris dot richard at gmail dot com
Summary: Intermittent Seg Fault during DOMDocument clean up
-Status: Feedback
+Status: Open
Type: Bug
Package: DOM XML related
Operating System: Linux (Ubuntu 10)
PHP Version: 5.3.2
Block user comment: N
Private report: N
New Comment:
This script reproduces the issue fairly consistently on my machine:
<?
$doc = new DOMDocument();
$doc->loadXML(
"<?xml version='1.0'?>".
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd" [
<!ENTITY nbsp " ">
<!ENTITY copy "©">
<!ENTITY ndash "–">
<!ENTITY mdash "—">
]>'.
"<html/>");
$fragment = $doc->createDocumentFragment();
$fragment->appendXML("<head></head><body><insert/></body>");
$doc->documentElement->appendChild($fragment);
ob_start();
?>
<ul>
<li>lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum
dolor sit
amet</li>
<li>lorem ipsum dolor sit amet lorem ipsum dolor sit amet</li>
<li>lorem ipsum dolor sit amet lorem ipsum dolor sit amet</li>
<li>lorem ipsum dolor sit amet lorem ipsum dolor sit amet</li>
</ul>
<h2>lorem ipsum dolor sit amet lorem ipsum dolor sit amet
<hr />
</h2>
<p>lorem ipsum dolor sit amet lorem ipsum dolor sit amet</p>
<p>When the mortgage rate is 'fixed' it means that the rate (%) is set
for the
duration of the term, whereas with a variable mortgage rate, the rate
fluctuates
with the market interest rate, known as the 'prime rate'. So, for
example, if
the 5 year fixed mortgage rate is 4%, then you will pay 4% interest
throughout
the term of the mortgage.</p>
<p>lorem ipsum dolor sit amet lorem ipsum dolor sit amet</p>
<h2>Popularity of the 5-year fixed rate
<hr />
</h2>
<h3 class="table-title">Mortgages by length of term and age group</h3>
<table cellspacing="0">
<thead>
<tr class="group-header">
<th> </th> <th colspan="4">Age group</th>
</tr>
<tr class="column-headers">
<th> </th> <th>18-34</th> <th>35-54</th> <th>55+</th> <th
class="total">All
ages</th>
</tr>
</thead>
<tbody>
<tr class="alternate">
<th>1 year term</th>
<td>5%</td>
<td>7%</td>
<td>6%</td>
<td class="total">6%</td>
</tr>
<tr>
<th>2-4 year term</th>
<td>27%</td>
<td>18%</td>
<td>12%</td>
<td class="total">20%</td>
</tr>
<tr class="highlight">
<th>5 year term</th>
<td>66%</td>
<td>65%</td>
<td>69%</td>
<td class="total">66%</td>
</tr>
<tr>
<th>6-10 year term</th>
<td>3%</td>
<td>9%</td>
<td>10%</td>
<td class="total">7%</td>
</tr>
<tr class="alternate">
<th>>10 year term</th>
<td>0</td>
<td>0</td>
<td>2%</td>
<td class="total">1%</td>
</tr>
</tbody>
</table>
<?
$output = ob_get_clean();
$fragment = $doc->createDocumentFragment();
$fragment->appendXML($output);
$xpath = new DOMXpath($doc);
$insert = $xpath->query(".//insert")->item(0);
$insert->parentNode->replaceChild($fragment, $insert);
echo $doc->saveHTML();
?>
Previous Comments:
------------------------------------------------------------------------
[2010-12-18 16:57:51] [email protected]
Can you provide a small script that reproduces this issue?
It's complicated to find the error from backtraces that happen in the
destruction phase; by this time the harm has long been done.
Also please use the latest version of PHP.
Thank you.
------------------------------------------------------------------------
[2010-12-18 06:16:59] chris dot richard at gmail dot com
PHP 5.3.2
libxml 2.7.6
------------------------------------------------------------------------
[2010-12-18 06:11:31] chris dot richard at gmail dot com
Description:
------------
libxml causes a seg fault *intermittently* after all PHP user code has
finished
running.
I'm using DOMFragment to parse chunks of XHTML and append them to a
DOMDocument
which gets output (via saveHTML) once it's completely assembled. The
output
completes successfully but at least half the time I get seg fault
related to the
clean up of the DOMDocument and no response is sent to the client.
Core Dump:
#0 0x00007fb2f77c6e6f in xmlDictOwns () from /usr/lib/libxml2.so.2
#1 0x00007fb2f77276a7 in xmlFreeNodeList () from /usr/lib/libxml2.so.2
#2 0x00007fb2f76ff85f in ?? () from /usr/lib/libxml2.so.2
#3 0x00007fb2f772f256 in xmlHashFree () from /usr/lib/libxml2.so.2
#4 0x00007fb2f7727335 in xmlFreeDtd () from /usr/lib/libxml2.so.2
#5 0x00007fb2f772746a in xmlFreeDoc () from /usr/lib/libxml2.so.2
#6 0x00007fb2f8409d5b in php_libxml_decrement_doc_ref ()
from /usr/lib/apache2/modules/libphp5.so
#7 0x00007fb2f842e8cf in ?? () from
/usr/lib/apache2/modules/libphp5.so
#8 0x00007fb2f8661adc in zend_objects_store_del_ref_by_handle_ex ()
from /usr/lib/apache2/modules/libphp5.so
#9 0x00007fb2f8661b03 in zend_objects_store_del_ref ()
from /usr/lib/apache2/modules/libphp5.so
#10 0x00007fb2f86301cd in _zval_ptr_dtor () from
/usr/lib/apache2/modules/libphp5.so
#11 0x00007fb2f8649198 in zend_hash_destroy () from
/usr/lib/apache2/modules/libphp5.so
#12 0x00007fb2f863c19f in _zval_dtor_func () from
/usr/lib/apache2/modules/libphp5.so
#13 0x00007fb2f86301cd in _zval_ptr_dtor () from
/usr/lib/apache2/modules/libphp5.so
#14 0x00007fb2f8649198 in zend_hash_destroy () from
/usr/lib/apache2/modules/libphp5.so
#15 0x00007fb2f865e0d9 in zend_object_std_dtor () from
/usr/lib/apache2/modules/libphp5.so
#16 0x00007fb2f865e0f9 in zend_objects_free_object_storage ()
from /usr/lib/apache2/modules/libphp5.so
#17 0x00007fb2f8661adc in zend_objects_store_del_ref_by_handle_ex ()
from /usr/lib/apache2/modules/libphp5.so
#18 0x00007fb2f8661b03 in zend_objects_store_del_ref ()
from /usr/lib/apache2/modules/libphp5.so
#19 0x00007fb2f86301cd in _zval_ptr_dtor () from
/usr/lib/apache2/modules/libphp5.so
#20 0x00007fb2f8649198 in zend_hash_destroy () from
/usr/lib/apache2/modules/libphp5.so
#21 0x00007fb2f863c19f in _zval_dtor_func () from
/usr/lib/apache2/modules/libphp5.so
#22 0x00007fb2f86301cd in _zval_ptr_dtor () from
/usr/lib/apache2/modules/libphp5.so
#23 0x00007fb2f8649198 in zend_hash_destroy () from
/usr/lib/apache2/modules/libphp5.so
#24 0x00007fb2f865e0d9 in zend_object_std_dtor () from
/usr/lib/apache2/modules/libphp5.so
#25 0x00007fb2f865e0f9 in zend_objects_free_object_storage ()
from /usr/lib/apache2/modules/libphp5.so
#26 0x00007fb2f86615ec in zend_objects_store_free_object_storage ()
from /usr/lib/apache2/modules/libphp5.so
#27 0x00007fb2f86305c5 in ?? () from
/usr/lib/apache2/modules/libphp5.so
#28 0x00007fb2f863cee2 in ?? () from
/usr/lib/apache2/modules/libphp5.so
#29 0x00007fb2f85e8b75 in php_request_shutdown () from
/usr/lib/apache2/modules/libphp5.so
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53569&edit=1