ID: 30045 Updated by: [EMAIL PROTECTED] Reported By: paulmonk at shaw dot ca -Status: Assigned +Status: Closed Bug Type: SOAP related Operating System: Windows 2000 PHP Version: 5.0.1 Assigned To: dmitry New Comment:
Fixed in CVS HEAD and PHP_5_0. ext/soap doesn't validate integer type constranits and it cannot handle integer numbers those cannot fit into C double. Previous Comments: ------------------------------------------------------------------------ [2004-09-10 10:26:29] [EMAIL PROTECTED] Can you shed some light on this DMitry? ------------------------------------------------------------------------ [2004-09-10 10:08:59] paulmonk at shaw dot ca If PHP doesn't understand integers larger than 2147483647, why is it that unsigned longs work as expected up to 17179869184 (and beyond)? In that case, one would expect long values up to at least 8589934592 to be supported. Please note that I'm talking specifically about passing different data types to the SOAP extension, not PHP's handling of integers. How does one assign a long value? If the XSD_LONG constant exists, there should be some way to pass a long. ------------------------------------------------------------------------ [2004-09-10 09:19:34] [EMAIL PROTECTED] No bug here, PHP simply doesn't understand integers larger than 2147483647. ------------------------------------------------------------------------ [2004-09-10 03:34:09] paulmonk at shaw dot ca Description: ------------ It seems that xsd:long values > 2147483647 are not represented correctly in SOAP requests/responses. Looks like they are being treated as PHP integers. (Unsigned longs work fine.) Reproduce code: --------------- When I pass the following parameters in a SoapClient::__call(): $long1 = new SoapVar(2147483647, XSD_LONG); $long2 = new SoapVar(2147483648, XSD_LONG); $long3 = new SoapVar(4294967296, XSD_LONG); $long4 = new SoapVar(8589934592, XSD_LONG); $long5 = new SoapVar(17179869184, XSD_LONG); $ulong1 = new SoapVar(2147483647, XSD_UNSIGNEDLONG); $ulong2 = new SoapVar(2147483648, XSD_UNSIGNEDLONG); $ulong3 = new SoapVar(4294967296, XSD_UNSIGNEDLONG); $ulong4 = new SoapVar(8589934592, XSD_UNSIGNEDLONG); $ulong5 = new SoapVar(17179869184, XSD_UNSIGNEDLONG); Expected result: ---------------- The parameters in the SOAP request should be: ... <long1 xsi:type="xsd:long">2147483647</long1> <long2 xsi:type="xsd:long">2147483648</long2> <long3 xsi:type="xsd:long">4294967296</long3> <long4 xsi:type="xsd:long">8589934592</long4> <long5 xsi:type="xsd:long">17179869184</long5> <ulong1 xsi:type="xsd:unsignedLong">2147483647</ulong1> <ulong2 xsi:type="xsd:unsignedLong">2147483648</ulong2> <ulong3 xsi:type="xsd:unsignedLong">4294967296</ulong3> <ulong4 xsi:type="xsd:unsignedLong">8589934592</ulong4> <ulong5 xsi:type="xsd:unsignedLong">17179869184</ulong5> Actual result: -------------- The actual parameters in the SOAP request are: ... <long1 xsi:type="xsd:long">2147483647</long1> <long2 xsi:type="xsd:long">-2147483648</long2> <long3 xsi:type="xsd:long">0</long3> <long4 xsi:type="xsd:long">0</long4> <long5 xsi:type="xsd:long">0</long5> <ulong1 xsi:type="xsd:unsignedLong">2147483647</ulong1> <ulong2 xsi:type="xsd:unsignedLong">2147483648</ulong2> <ulong3 xsi:type="xsd:unsignedLong">4294967296</ulong3> <ulong4 xsi:type="xsd:unsignedLong">8589934592</ulong4> <ulong5 xsi:type="xsd:unsignedLong">17179869184</ulong5> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=30045&edit=1