Bug #79528 [ReO]: Different object of the same xml between 7.4.5 and 7.4.4

From: Date: Fri, 01 May 2020 10:14:19 +0000
Subject: Bug #79528 [ReO]: Different object of the same xml between 7.4.5 and 7.4.4
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-226870@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79528&edit=1

 ID:                 79528
 Updated by:         cmb@php.net
 Reported by:        roke22 at gmail dot com
 Summary:            Different object of the same xml between 7.4.5 and
                     7.4.4
 Status:             Re-Opened
 Type:               Bug
 Package:            SimpleXML related
 Operating System:   Linux
 PHP Version:        7.4.5
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

In hindsight, I agree that this should not have been changed in
revision releases, so I'm going to revert, and also check with the
release managers whether the revert can be applied to PHP 7.3.18
and 7.4.6.

Furthermore, the new behavior still doesn't make sense[1], so
perhaps sticking with the old behavior even for PHP 8 might be
best. 

[1] <https://3v4l.org/SPp3f>


Previous Comments:
------------------------------------------------------------------------
[2020-04-30 22:20:45] nikic@php.net

@cmb: Looks like this had some unintended effects.

------------------------------------------------------------------------
[2020-04-30 21:55:53] ttijhof at wikimedia dot org

This changed has caused observable changes in user-land code in a bug release, which seems like
something that should not happen.

An isolated test case exists at https://3v4l.org/HtN9R.

This is not debugging output, these are run-time return values. And it doesn't even rely on
reflection or something hacky like that.

I would expect a breaking change of this kind, where the API provides an entirely different return
value (string vs array of objects), to be something that happens in a major release like PHP 8.0,
not in a minor release, and most definitely not in a patch release to PHP 7.3 or PHP 7.4. Even then
I would think such change, which is hard to support both versions of, would probably benefit from a
feature flag, run-time option, or some other method name so that there is a deprecation notice and
so that one can actually do a running migration.

------------------------------------------------------------------------
[2020-04-27 07:53:59] nikic@php.net

To be clear, this should have changed only debug output, not anything else.

------------------------------------------------------------------------
[2020-04-27 07:48:03] requinix@php.net

The change in behavior is a result of a bug fix - see bug #61597.

The problem was that nodes with attributes were being treated as strings in cases that they should
not have been. Your example is one such case: the <value3> elements have attributes so simply
treating them as strings would lose that data.

------------------------------------------------------------------------
[2020-04-27 07:38:09] roke22 at gmail dot com

Description:
------------
---
From manual page: https://php.net/function.simplexml-load-string
---

We got different object when we read the same xml with php 7.4.4 and 7.4.5.

In php 7.4.4 we got a SimpleXMLElement object with an array.
In php 7.4.5 we got a SimpleXMLElement object with SimpleXMLElement objects.

This cause different behaviour on the same code. I think that in minor changes this have to be the
same result.

Test script:
---------------
<?php
$resultado = simplexml_load_string("<value1><value2><value3
valueinside='1'>17321</value3><value3
valueinside='2'>17321</value3></value2></value1>");
var_dump($resultado);

Expected result:
----------------
We expect the same resulto on both versions.

Actual result:
--------------
root@400e641ac608:/# php --version
PHP 7.4.5 (cli) (built: Apr 17 2020 11:29:12) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v2.9.4, Copyright (c) 2002-2020, by Derick Rethans
root@400e641ac608:/# cd /var/www/html/
root@400e641ac608:/var/www/html# php prueba.php 
/var/www/html/prueba.php:3:
class SimpleXMLElement#1 (1) {
  public $value2 =>
  class SimpleXMLElement#2 (1) {
    public $value3 =>
    array(2) {
      [0] =>
      class SimpleXMLElement#3 (2) {
        ...
      }
      [1] =>
      class SimpleXMLElement#4 (2) {
        ...
      }
    }
  }
}


root@757c3e5e6b91:/var/www/html# php --version
PHP 7.4.4 (cli) (built: Apr 16 2020 15:22:19) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v2.9.4, Copyright (c) 2002-2020, by Derick Rethans
root@757c3e5e6b91:/var/www/html# php prueba.php 
/var/www/html/prueba.php:3:
class SimpleXMLElement#1 (1) {
  public $value2 =>
  class SimpleXMLElement#2 (1) {
    public $value3 =>
    array(2) {
      [0] =>
      string(5) "17321"
      [1] =>
      string(5) "17321"
    }
  }
}



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



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


Thread (9 messages)

« previous php.bugs (#226870) next »