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

From: Date: Thu, 30 Apr 2020 21:55:53 +0000
Subject: Bug #79528 [Com]: 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-226857@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
 Comment by:         ttijhof at wikimedia dot org
 Reported by:        roke22 at gmail dot com
 Summary:            Different object of the same xml between 7.4.5 and
                     7.4.4
 Status:             Not a bug
 Type:               Bug
 Package:            SimpleXML related
 Operating System:   Linux
 PHP Version:        7.4.5
 Block user comment: N
 Private report:     N

 New Comment:

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.


Previous Comments:
------------------------------------------------------------------------
[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 (#226857) next »