Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:59099 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 28655 invoked from network); 20 Mar 2012 22:27:55 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 20 Mar 2012 22:27:55 -0000 Authentication-Results: pb1.pair.com smtp.mail=scope@planetavent.de; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=scope@planetavent.de; sender-id=unknown Received-SPF: error (pb1.pair.com: domain planetavent.de from 89.107.189.172 cause and error) X-PHP-List-Original-Sender: scope@planetavent.de X-Host-Fingerprint: 89.107.189.172 mail.xa8.serverdomain.org Received: from [89.107.189.172] ([89.107.189.172:42651] helo=mail.xa8.serverdomain.org) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id D0/92-15108-964096F4 for ; Tue, 20 Mar 2012 17:27:54 -0500 Received: from [10.0.0.20] (ip-178-202-22-28.unitymediagroup.de [178.202.22.28]) (Authenticated sender: xa8190p1) by mail.xa8.serverdomain.org (mail.xa8.serverdomain.org) with ESMTPSA id A0F582843A055; Tue, 20 Mar 2012 23:27:50 +0100 (CET) Message-ID: <4F690466.6010102@planetavent.de> Date: Tue, 20 Mar 2012 23:27:50 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2 MIME-Version: 1.0 To: Internals X-Enigmail-Version: 1.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: DOMDocument->saveXML with node parameter From: scope@planetavent.de (Nicolai Scheer) Hi! Just stumbled upon the issue described in https://bugs.php.net/bug.php?id=39771 during a Windows -> Linux migration. The windows binaries for php 5.3.10 and 5.4 got no problems executing the following: loadHTML( 'Test' ); $body = $doc->getElementsByTagName( 'body' )->item( 0 ); echo $doc->saveHTML( $body ); If I compile 5.3.10 myself (RHEL 5.7), I get the very same behaviour as described in the last comment of bug 39771: "PHP Warning: DOMDocument::saveHTML() expects exactly 0 parameters, 1 given" A quick look at the sources of 5.3.10 show, that there is indeed a optional node parameter: ext/dom/document.c:2296: if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|O!", &id, dom_document_class_entry, &nodep, dom_node_class_entry) == FAILURE) { return; } Yet, the arginfo does not reflect this, e.g. ext/dom/document.c:158: ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savehtml, 0, 0, 0) ZEND_END_ARG_INFO(); should read ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savehtml, 0, 0, 0) ZEND_ARG_OBJ_INFO(0, node, DOMNode, 1) ZEND_END_ARG_INFO(); If I allow for passing that optional parameter by adjusting the arginfo, the php snippet posted above works just fine. The documentation of DOMDocument::saveHTML is in sync with the implementation of dom_document_save_html, it seems that just the parameter checking is wrong. It is very confusing, that the provided windows binaries work, but the compiled-it-myself php on linux does not. Any insight on the correctness of this (documented) feature as well as the windows / linux discrepancy is very appreciated. Sincerely, Nico