Bug #70078 [Com]: Memleak when calling PHP functions from XSL with nodes as parameter
| From: | mplomer at gmx dot de | Date: | Wed, 15 Jul 2015 20:57:02 +0000 |
| Subject: | Bug #70078 [Com]: Memleak when calling PHP functions from XSL with nodes as parameter | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-194467@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=70078&edit=1
ID: 70078
Comment by: mplomer at gmx dot de
Reported by: mplomer at gmx dot de
Summary: Memleak when calling PHP functions from XSL with
nodes as parameter
Status: Verified
Type: Bug
Package: XSLT related
Operating System: any
PHP Version: 5.6.11
Block user comment: N
Private report: N
New Comment:
I also did not understand why exactly the xmlDocCopyNodeList() has been introduced here. IMHO
passing nodes to a PHP function should never implicate such expensive recursive clones.
Previous Comments:
------------------------------------------------------------------------
[2015-07-15 20:38:43] cmb@php.net
The memory leak (which I can confirm) might be caused by using
xmlDocCopyNodeList() to create a new node list, which would have
to be freed using xmlFreeNodeList() but is actually freed with
xmlFreeNode().
However, I'm not able to reproduce the behavior described in
#49634 with PHP 5.4.23, libxml2-2.7.4 and libxslt-1.1.25
(bug49634.phpt is passing there as well), so I can't go on here
without the risk to reintroduce #49634.
------------------------------------------------------------------------
[2015-07-14 18:58:16] mplomer at gmx dot de
Related To: Bug #49634
------------------------------------------------------------------------
[2015-07-14 18:55:59] mplomer at gmx dot de
Description:
------------
When calling registered PHP functions in XSLTProcessor from a XSL stylesheet with references to
nodes as parameter, you will notice bad performence and - depending on XML structure - a big
memleak.
Test-Script see:
https://gist.github.com/not-implemented/bb41831a4892f1459e5b
Until 5.4.23 you have ~25 MB RAM usage of the process at the end
Starting with 5.4.24 you have ~1030 MB RAM usage of the process at the end
Please notice, that this high usage is NOT covered by memory_get_usage().
When passing a fixed string to the function instead of ".", the problem ist not
reproducable.
This seems to be introduced in Bug #49634 between 5.4.23 and 5.4.24 (or maybe ~5.5.7 and 5.5.8)
where nodes are recursively duplicated now.
Expected result:
----------------
Memory usage ~25 MB RAM
Actual result:
--------------
Memory usage ~1030 MB RAM
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70078&edit=1