From eac14b5ef2156fe44496a3f84d5e35fde8cbb7b3 Mon Sep 17 00:00:00 2001 From: Harry Walter Date: Fri, 31 Aug 2012 12:27:42 +0200 Subject: [PATCH 1/3] Check if key # is defined in $value If # is undefined in $value use set the attribute value as $value --- src/Symfony/Component/Serializer/Encoder/XmlEncoder.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php index cb46926111..91e4b80840 100644 --- a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php @@ -240,7 +240,11 @@ class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, Dec if ($key === 'item') { if (isset($value['@key'])) { - $data[(string) $value['@key']] = $value['#']; + if (isset($value['#'])) { + $data[(string) $value['@key']] = $value['#']; + } else { + $data[(string) $value['@key']] = $value; + } } else { $data['item'][] = $value; } From b73b87d5716454afc481ea9ecc273176b8594631 Mon Sep 17 00:00:00 2001 From: Harry Walter Date: Sat, 1 Sep 2012 17:17:49 +0100 Subject: [PATCH 2/3] Maintain array structure --- src/Symfony/Component/Serializer/Encoder/XmlEncoder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php index 91e4b80840..57e5b4b4f5 100644 --- a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php @@ -248,7 +248,7 @@ class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, Dec } else { $data['item'][] = $value; } - } elseif (array_key_exists($key, $data)) { + } elseif (array_key_exists($key, $data) || $key == "entry") { if ((false === is_array($data[$key])) || (false === isset($data[$key][0]))) { $data[$key] = array($data[$key]); } From b4e894a07de78340903db68d15a2a752f8146758 Mon Sep 17 00:00:00 2001 From: Eduardo Gulias Davis Date: Wed, 12 Dec 2012 15:11:42 +0100 Subject: [PATCH 3/3] - Test undefined index # --- .../Tests/Encoder/XmlEncoderTest.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php index 4986f791c9..23cb0217a6 100644 --- a/src/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php +++ b/src/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php @@ -251,6 +251,39 @@ class XmlEncoderTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expected, $this->encoder->decode($source, 'xml')); } + public function testDecodeWithoutItemHash() + { + $obj = new ScalarDummy; + $obj->xmlFoo = array( + 'foo-bar' => array( + '@key' => "value", + 'item' => array("@key" => 'key', "key-val" => 'val') + ), + 'Foo' => array( + 'Bar' => "Test", + '@Type' => 'test' + ), + 'föo_bär' => 'a', + "Bar" => array(1,2,3), + 'a' => 'b', + ); + $expected = array( + 'foo-bar' => array( + '@key' => "value", + 'key' => array('@key' => 'key', "key-val" => 'val') + ), + 'Foo' => array( + 'Bar' => "Test", + '@Type' => 'test' + ), + 'föo_bär' => 'a', + "Bar" => array(1,2,3), + 'a' => 'b', + ); + $xml = $this->encoder->encode($obj, 'xml'); + $this->assertEquals($expected, $this->encoder->decode($xml, 'xml')); + } + public function testPreventsComplexExternalEntities() { $oldCwd = getcwd();