/** * @group ZF-6445 * @dataProvider Zend_XmlRpc_TestProvider::provideGenerators */ public function testMarschalBigIntegerFromApacheXmlRpc(Zend_XmlRpc_Generator_GeneratorAbstract $generator) { Zend_XmlRpc_Value::setGenerator($generator); $bigIntegerValue = (string) (PHP_INT_MAX + 42); $bigInteger = new Zend_XmlRpc_Value_BigInteger($bigIntegerValue); $bigIntegerXml = '<value><ex:i8 xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">' . $bigIntegerValue . '</ex:i8></value>'; $value = Zend_XmlRpc_Value::getXmlRpcValue($bigIntegerXml, Zend_XmlRpc_Value::XML_STRING); $this->assertSame($bigIntegerValue, $value->getValue()); $this->assertEquals(Zend_XmlRpc_Value::XMLRPC_TYPE_I8, $value->getType()); $this->assertEquals($this->wrapXml($bigIntegerXml), $value->saveXml()); }
/** * @dataProvider Zend_XmlRpc_TestProvider::provideGenerators */ public function testMarshalBase64FromXmlRpc(Zend_XmlRpc_Generator_GeneratorAbstract $generator) { Zend_XmlRpc_Value::setGenerator($generator); $native = 'foo'; $xml = '<value><base64>' . base64_encode($native) . '</base64></value>'; $val = Zend_XmlRpc_Value::getXmlRpcValue($xml, Zend_XmlRpc_Value::XML_STRING); $this->assertXmlRpcType('base64', $val); $this->assertEquals('base64', $val->getType()); $this->assertSame($native, $val->getValue()); $this->assertEquals($this->wrapXml($xml), $val->saveXml()); }
<?php /** * Zend_XmlRpc_Generator_XmlWriter->saveXml() * fix * $this->_xmlWriter->flush(false) * to * $this->_xmlWriter->flush(true); */ // installed framework set_include_path(realpath('../src/ZendFramework/library')); // required classes require_once 'Zend/XmlRpc/Generator/XmlWriter.php'; require_once 'Zend/XmlRpc/Value.php'; // be sure to use the leaky generator $generator = new Zend_XmlRpc_Generator_XmlWriter(); Zend_XmlRpc_Value::setGenerator($generator); // test a thousand times for ($i = 1000; $i > 0; $i--) { // make a thousand stars $bug = str_pad('', 1000, '*'); // factorize value $bug = Zend_XmlRpc_Value::getXmlRpcValue($bug, Zend_XmlRpc_Value::XMLRPC_TYPE_STRING); // save value, this leaks! $bug = $bug->saveXml(); // report sometimes if ($i % 100 === 0) { $mem = floor(memory_get_usage() / 1024); echo "KB {$mem}\n"; } // print once if ($i === 1) {