Bug #80895 [Com]: Unexpected XML due to memory optimization in SOAP

From: Date: Wed, 24 Mar 2021 14:38:38 +0000
Subject: Bug #80895 [Com]: Unexpected XML due to memory optimization in SOAP
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-232975@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80895&edit=1 ID: 80895 Comment by: vasilevrvv at gmail dot com Reported by: vasilevrvv at gmail dot com Summary: Unexpected XML due to memory optimization in SOAP Status: Assigned Type: Bug Package: SOAP related Operating System: Linux PHP Version: 8.0.3 Assigned To: cmb Block user comment: N Private report: N New Comment: Oh, not an object, an array, I'm sorry. Previous Comments: ------------------------------------------------------------------------ [2021-03-24 14:33:03] vasilevrvv at gmail dot com I think this is not obvious behavior. To avoid references - I have to clone the object in the code. Maybe it's better to change this logic? ------------------------------------------------------------------------ [2021-03-24 14:26:22] cmb@php.net Well, apparently ext/soap indeed not only encodes references as multi-reference values, but also zvals with refcount > 1. The latter doesn't look right to me for arrays, because these are value types in PHP, but not necessarily in other languages. ------------------------------------------------------------------------ [2021-03-24 13:57:59] vasilevrvv at gmail dot com Hmm, in php5, the behavior is generally differen ti need to research ------------------------------------------------------------------------ [2021-03-24 13:31:56] vasilevrvv at gmail dot com each pass of the foreach is the same zval, before trying to change it. and the soap library takes this as a reference, but it is not a reference. ------------------------------------------------------------------------ [2021-03-24 13:14:23] vasilevrvv at gmail dot com For example, let's change not the address, but another variable, this also helped. And add call xdebug_debug_zval before and after call: xdebug_debug_zval('returnAddressee'); $returnAddressee['person_name'] = $returnAddressee['person_name']; xdebug_debug_zval('returnAddressee'); Before: (refcount=4, is_ref=0) array (size=4) 'person_name' => (refcount=1, is_ref=0)string ',,,,,, Here refcount=4 Call: $returnAddressee['person_name'] = $returnAddressee['person_name']; After (refcount=1, is_ref=0) array (size=4) 'person_name' => (refcount=2, is_ref=0)string '..... Here refcount=1 When the array changes, it becomes another array, this is what causes the problem ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=80895 -- Edit this bug report at https://bugs.php.net/bug.php?id=80895&edit=1

« previous php.bugs (#232975) next »