bug30045.phpt   [plain text]


--TEST--
Bug #30045 (Cannot pass big integers (> 2147483647) in SOAP requests)
--SKIPIF--
<?php 
  if (!extension_loaded('soap')) die('skip soap extension not available');
  if (!extension_loaded('simplexml')) die('skip simplexml extension not available');
?>
--INI--
soap.wsdl_cache_enabled=1
--FILE--
<?php

function foo($type, $num) {
  return new SoapVar($num, $type);
}

class LocalSoapClient extends SoapClient {

  function __construct($wsdl, $options) {
    parent::__construct($wsdl, $options);
    $this->server = new SoapServer($wsdl, $options);
    $this->server->addFunction('foo');
  }

  function __doRequest($request, $location, $action, $version, $one_way = 0) {
    $xml = simplexml_load_string($request);
    echo $xml->children("http://schemas.xmlsoap.org/soap/envelope/")->Body->children("http://test-uri")->children()->param1->asXML(),"\n";
    unset($xml);

    ob_start();
    $this->server->handle($request);
    $response = ob_get_contents();
    ob_end_clean();

    return $response;
  }

}

$soap = new LocalSoapClient(NULL, array("uri"=>"http://test-uri", "location"=>"test://"));

function test($type, $num) {
  global $soap;
  try {
	  printf("  %0.0f\n    ", $num);  	
	  $ret = $soap->foo($type, new SoapVar($num, $type));
	  printf("    %0.0f\n", $ret);
	} catch (SoapFault $ex) {
	  var_dump($ex);
	}
}
/*
echo "byte\n";
//test(XSD_BYTE, -129);
test(XSD_BYTE, -128);
test(XSD_BYTE,  127);
//test(XSD_BYTE,  128);

echo "\nshort\n";
//test(XSD_SHORT, -32769);
test(XSD_SHORT, -32768);
test(XSD_SHORT,  32767);
//test(XSD_SHORT,  32768);

echo "\nint\n";
//test(XSD_INT, -2147483649);
test(XSD_INT, -2147483648);
test(XSD_INT,  2147483647);
//test(XSD_INT,  2147483648);

echo "\nlong\n";
//test(XSD_LONG, -9223372036854775809);
test(XSD_LONG, -9223372036854775808);
test(XSD_LONG,  9223372036854775807);
//test(XSD_LONG,  9223372036854775808);

echo "\nunsignedByte\n";
//test(XSD_UNSIGNEDBYTE, -1);
test(XSD_UNSIGNEDBYTE,  0);
test(XSD_UNSIGNEDBYTE,  255);
//test(XSD_UNSIGNEDBYTE,  256);

echo "\nunsignedShort\n";
//test(XSD_UNSIGNEDSHORT, -1);
test(XSD_UNSIGNEDSHORT,  0);
test(XSD_UNSIGNEDSHORT,  65535);
//test(XSD_UNSIGNEDSHORT,  65536);

echo "\nunsignedInt\n";
//test(XSD_UNSIGNEDINT, -1);
test(XSD_UNSIGNEDINT,  0);
test(XSD_UNSIGNEDINT,  4294967295);
//test(XSD_UNSIGNEDINT,  4294967296);

echo "\nunsignedLong\n";
//test(XSD_UNSIGNEDLONG, -1);
test(XSD_UNSIGNEDLONG,  0);
test(XSD_UNSIGNEDLONG,  18446744073709551615);
//test(XSD_UNSIGNEDLONG,  18446744073709551616);

echo "\nnegativeInteger\n";
test(XSD_NEGATIVEINTEGER, -18446744073709551616);
test(XSD_NEGATIVEINTEGER, -1);
//test(XSD_NEGATIVEINTEGER,  0);

echo "\nnonPositiveInteger\n";
test(XSD_NONPOSITIVEINTEGER, -18446744073709551616);
test(XSD_NONPOSITIVEINTEGER,  0);
//test(XSD_NONPOSITIVEINTEGER,  1);

echo "\nnonNegativeInteger\n";
//test(XSD_NONNEGATIVEINTEGER, -1);
test(XSD_NONNEGATIVEINTEGER,  0);
test(XSD_NONNEGATIVEINTEGER,  18446744073709551616);

echo "\nPositiveInteger\n";
//test(XSD_POSITIVEINTEGER,  0);
test(XSD_POSITIVEINTEGER,  1);
test(XSD_POSITIVEINTEGER,  18446744073709551616);

echo "\ninteger\n";
test(XSD_INTEGER, -18446744073709551616);
test(XSD_INTEGER,  18446744073709551616);
*/
echo "long\n";
test(XSD_LONG, 2147483647);
test(XSD_LONG, 2147483648);
test(XSD_LONG,  4294967296);
test(XSD_LONG,  8589934592);
test(XSD_LONG, 17179869184); 

echo "\nunsignedLong\n";
test(XSD_UNSIGNEDLONG,  2147483647);
test(XSD_UNSIGNEDLONG,  2147483648);
test(XSD_UNSIGNEDLONG,  4294967296);
test(XSD_UNSIGNEDLONG,  8589934592);
test(XSD_UNSIGNEDLONG, 17179869184);

?>
--EXPECT--
long
  2147483647
    <param1 xsi:type="xsd:long">2147483647</param1>
    2147483647
  2147483648
    <param1 xsi:type="xsd:long">2147483648</param1>
    2147483648
  4294967296
    <param1 xsi:type="xsd:long">4294967296</param1>
    4294967296
  8589934592
    <param1 xsi:type="xsd:long">8589934592</param1>
    8589934592
  17179869184
    <param1 xsi:type="xsd:long">17179869184</param1>
    17179869184

unsignedLong
  2147483647
    <param1 xsi:type="xsd:unsignedLong">2147483647</param1>
    2147483647
  2147483648
    <param1 xsi:type="xsd:unsignedLong">2147483648</param1>
    2147483648
  4294967296
    <param1 xsi:type="xsd:unsignedLong">4294967296</param1>
    4294967296
  8589934592
    <param1 xsi:type="xsd:unsignedLong">8589934592</param1>
    8589934592
  17179869184
    <param1 xsi:type="xsd:unsignedLong">17179869184</param1>
    17179869184