From df44a0856da391b7adb845055dfe317726b38a1c Mon Sep 17 00:00:00 2001 From: Intiilapa Date: Sun, 7 Aug 2011 10:40:02 +0200 Subject: [PATCH 1/3] ZF-11161 (revision 23980) Backing out r23905 from trunk, this will need a more complex/detailed fix --- src/Formatter/Xml.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Formatter/Xml.php b/src/Formatter/Xml.php index 2cdd63b9..1640be1b 100644 --- a/src/Formatter/Xml.php +++ b/src/Formatter/Xml.php @@ -155,7 +155,7 @@ public function format($event) if($key == "message") { $value = htmlspecialchars($value, ENT_COMPAT, $enc); } - $elt->appendChild(new \DOMElement($key, (string)$value)); + $elt->appendChild(new \DOMElement($key, $value)); } $xml = $dom->saveXML(); From cc72da63c8401977d65304d878cb73c86ac2b716 Mon Sep 17 00:00:00 2001 From: Intiilapa Date: Sun, 7 Aug 2011 10:46:52 +0200 Subject: [PATCH 2/3] ZF-11161 (revision 24079) Zend_Log Updated Zend_Log_Formatter_Xml to include only empty or scalar values in output, and cast values string before passing to DOMElement --- src/Formatter/Xml.php | 8 +++++--- test/Formatter/XmlTest.php | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Formatter/Xml.php b/src/Formatter/Xml.php index 1640be1b..5ecd0256 100644 --- a/src/Formatter/Xml.php +++ b/src/Formatter/Xml.php @@ -152,10 +152,12 @@ public function format($event) $elt = $dom->appendChild(new \DOMElement($this->_rootElement)); foreach ($dataToInsert as $key => $value) { - if($key == "message") { - $value = htmlspecialchars($value, ENT_COMPAT, $enc); + if(empty($value) || is_scalar($value)) { + if($key == "message") { + $value = htmlspecialchars($value, ENT_COMPAT, $enc); + } + $elt->appendChild(new \DOMElement($key, (string)$value)); } - $elt->appendChild(new \DOMElement($key, $value)); } $xml = $dom->saveXML(); diff --git a/test/Formatter/XmlTest.php b/test/Formatter/XmlTest.php index 16849c17..cb1f5ebd 100644 --- a/test/Formatter/XmlTest.php +++ b/test/Formatter/XmlTest.php @@ -127,4 +127,25 @@ public function testFactory() $formatter = XmlFormatter::factory($options); $this->assertInstanceOf('Zend\Log\Formatter\Xml', $formatter); } + + /** + * @group ZF-11161 + */ + public function testNonScalarValuesAreExcludedFromFormattedString() + { + $options = array( + 'rootElement' => 'log' + ); + $event = array( + 'message' => 'tottakai', + 'priority' => 4, + 'context' => array('test'=>'one'), + 'reference' => new XmlFormatter() + ); + $expected = 'tottakai4'; + + $formatter = XmlFormatter::factory($options); + $output = $formatter->format($event); + $this->assertContains($expected, $output); + } } From 98fbad20344eb1af0afb60fc2926057ca6a54393 Mon Sep 17 00:00:00 2001 From: Intiilapa Date: Sun, 7 Aug 2011 10:54:37 +0200 Subject: [PATCH 3/3] ZF-11161: allow objects implementing __toString in XML log format (revision 24236) - Added test for objects with __toString method when serializing an event for XML log format --- src/Formatter/Xml.php | 5 ++++- test/Formatter/XmlTest.php | 24 +++++++++++++++++++++++- test/TestAsset/SerializableObject.php | 10 ++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 test/TestAsset/SerializableObject.php diff --git a/src/Formatter/Xml.php b/src/Formatter/Xml.php index 5ecd0256..18023072 100644 --- a/src/Formatter/Xml.php +++ b/src/Formatter/Xml.php @@ -152,7 +152,10 @@ public function format($event) $elt = $dom->appendChild(new \DOMElement($this->_rootElement)); foreach ($dataToInsert as $key => $value) { - if(empty($value) || is_scalar($value)) { + if (empty($value) + || is_scalar($value) + || (is_object($value) && method_exists($value,'__toString')) + ) { if($key == "message") { $value = htmlspecialchars($value, ENT_COMPAT, $enc); } diff --git a/test/Formatter/XmlTest.php b/test/Formatter/XmlTest.php index cb1f5ebd..5890c4ad 100644 --- a/test/Formatter/XmlTest.php +++ b/test/Formatter/XmlTest.php @@ -21,7 +21,8 @@ namespace ZendTest\Log\Formatter; -use \Zend\Log\Formatter\Xml as XmlFormatter; +use ZendTest\Log\TestAsset\SerializableObject, + \Zend\Log\Formatter\Xml as XmlFormatter; /** * @category Zend @@ -148,4 +149,25 @@ public function testNonScalarValuesAreExcludedFromFormattedString() $output = $formatter->format($event); $this->assertContains($expected, $output); } + + /** + * @group ZF-11161 + */ + public function testObjectsWithStringSerializationAreIncludedInFormattedString() + { + $options = array( + 'rootElement' => 'log' + ); + $event = array( + 'message' => 'tottakai', + 'priority' => 4, + 'context' => array('test'=>'one'), + 'reference' => new SerializableObject() + ); + $expected = 'tottakai4ZendTest\Log\TestAsset\SerializableObject'; + + $formatter = XmlFormatter::factory($options); + $output = $formatter->format($event); + $this->assertContains($expected, $output); + } } diff --git a/test/TestAsset/SerializableObject.php b/test/TestAsset/SerializableObject.php new file mode 100644 index 00000000..703f2db1 --- /dev/null +++ b/test/TestAsset/SerializableObject.php @@ -0,0 +1,10 @@ +