php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #38055 Wrong interpretation of boolean parameters
Submitted: 2006-07-10 09:15 UTC Modified: 2006-07-10 10:34 UTC
From: afalak at poczta dot onet dot pl Assigned: dmitry (profile)
Status: Closed Package: SOAP related
PHP Version: 5CVS-2006-07-10 (CVS) OS: Windows 2000
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: afalak at poczta dot onet dot pl
New email:
PHP Version: OS:

 

 [2006-07-10 09:15 UTC] afalak at poczta dot onet dot pl
Description:
------------
This error is related to parameters typed as boolean in WSDL. Passing 1 or TRUE works fine, but '1' (string) or 2 (integer) is interpreted as FALSE. Why aren't such parameters interpreted like elsewhere in PHP (in if() i.e.)?

Note: This error pertains to both SoapClient and SoapServer, although the example is for client only.

Reproduce code:
---------------
[client]
<?php
$client = new SoapClient('a.wsdl');
$boolA = 1;
$boolB = '1';
$res = $client->Test(array('boolA'=>$boolA, 'boolB'=>$boolB));
?>

[server]
<?php
function Test($param) {
	file_put_contents('test.txt',
		($param->boolA ? 'true' : 'false')."\n".
		($param->boolB ? 'true' : 'false'));
	return 1;
}
$server = new SoapServer('a.wsdl');
$server->addFunction('Test');
$server->handle();
?>

[a.wsdl]
<?xml version="1.0" encoding="UTF-8"?>
<definitions
		xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
		xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
		xmlns:s="http://www.w3.org/2001/XMLSchema"
		xmlns:s0="http://test.pl"
		targetNamespace="http://test.pl"
		xmlns="http://schemas.xmlsoap.org/wsdl/"
>
	<types>
		<s:schema elementFormDefault="qualified" targetNamespace="http://test.pl">
			<s:complexType name="Test">
				<s:attribute use="required" name="boolA" type="s:boolean"/>
				<s:attribute use="required" name="boolB" type="s:boolean"/>
			</s:complexType>
			<s:element type="s0:Test" name="Test"/>
			<s:element type="s:int" name="Ret"/>
		</s:schema>
	</types>

	<message name="TestSoapIn">
		<part name="parameters" element="s0:Test"/>
	</message>
	<message name="TestSoapOut">
		<part name="parameters" element="s0:Ret"/>
	</message>
	<portType name="TestSoap">
		<operation name="Test">
			<input message="s0:TestSoapIn"/>
			<output message="s0:TestSoapOut"/>
		</operation>
	</portType>
	<binding name="TestSoap" type="s0:TestSoap">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
		<operation name="Test">
			<soap:operation soapAction="http:/Test/Test" style="document"/>
			<input>
				<soap:body use="literal"/>
			</input>
			<output>
				<soap:body use="literal"/>
			</output>
		</operation>
	</binding>
	<service name="Test">
		<port name="TestSoapPort" binding="s0:TestSoap">
			<soap:address location="http://localhost/server.php"/>
		</port>
	</service>
</definitions>


Expected result:
----------------
File test.txt should contain:
true
true


Actual result:
--------------
File test.txt contains:
true
false


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-07-10 10:34 UTC] dmitry@php.net
Fixed in CVS HEAD and PHP_5_2.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Oct 27 16:01:27 2024 UTC