Req #55700 [Opn->Csd]: Disable automatic registration on a DOMXpath object.

From: Date: Sat, 05 Oct 2019 17:04:53 +0000
Subject: Req #55700 [Opn->Csd]: Disable automatic registration on a DOMXpath object.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-223095@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=55700&edit=1

 ID:                 55700
 Updated by:         beberlei@php.net
 Reported by:        thomas at weinert dot info
 Summary:            Disable automatic registration on a DOMXpath object.
-Status:             Open
+Status:             Closed
 Type:               Feature/Change Request
 Package:            DOM XML related
 PHP Version:        5.3.8
-Assigned To:        
+Assigned To:        beberlei
 Block user comment: N
 Private report:     N

 New Comment:

Fixed in https://github.com/php/php-src/commit/6c963694b1399aeb4171b933767be92555c2927a


Previous Comments:
------------------------------------------------------------------------
[2019-09-23 20:47:58] beberlei@php.net

The following pull request has been associated:

Patch Name: ext/dom: Add global registerNodeNS flag on DOMXPath.
On GitHub:  https://github.com/php/php-src/pull/4740
Patch:      https://github.com/php/php-src/pull/4740.patch

------------------------------------------------------------------------
[2011-09-23 15:07:14] thomas at weinert dot info

This should not brake BC because the default value of the option would still be TRUE. If the
developer does not set the option to FALSE it will still show the same unpredictable behavior like
before. 

The idea is to make a transition from automatic to manual registration less painful and more secure.

But I am not sure about the evaluate()/query() parameter. It would get at least more complex. (NULL
= default, use option value)

------------------------------------------------------------------------
[2011-09-15 12:24:48] pajoye@php.net

See https://bugs.php.net/bug.php?id=49490 as
well

------------------------------------------------------------------------
[2011-09-15 12:19:52] pajoye@php.net

hi Rob!

Can you take a look pls? Afaict it is not BC but this behavior never really works 
:)

------------------------------------------------------------------------
[2011-09-15 11:16:33] thomas at weinert dot info

Description:
------------
DOMXpath currently registers namespaces of the current context or the document element
automatically. This results in broken and inconsistent results (Bug #49490). An argument has been
added to evaluate() and query() to change this behavior. The current situation is that the argument
and the context argument has ALWAYS to be used to have predictable results.

A better way would be an option on the DOMXpath object.

An option would not only mean less code, it will also allow to just change one part (initialization
of ones DOMXpath instance), without the need to modify all occurrences evaluate()/query() in
existing source.


Test script:
---------------
<?php

$dom = new DOMDocument();
$dom->loadXML(
  '<foobar><a:foo xmlns:a="urn:a">'.
  '<b:bar xmlns:b="urn:b"/></a:foo>'.
  '</foobar>'
);
$xpath = new DOMXPath($dom);
// disable automatic namespace registration
$xpath->enableRegisterNodeNS = FALSE;

$context = $dom->documentElement->firstChild;

$xpath->registerNamespace('a', 'urn:b');
var_dump(
  $xpath->evaluate(
    'descendant-or-self::a:*',
    $context
  )->item(0)->tagName
);
?>

Expected result:
----------------
string(5) "b:bar" 

Actual result:
--------------
string(5) "a:foo"


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=55700&edit=1


Thread (7 messages)

« previous php.bugs (#223095) next »