php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #38004 Parameters in SoapServer are decoded twice
Submitted: 2006-07-04 12:24 UTC Modified: 2006-07-10 07:23 UTC
From: afalak at poczta dot onet dot pl Assigned: dmitry (profile)
Status: Closed Package: SOAP related
PHP Version: 5CVS-2006-07-04 (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-04 12:24 UTC] afalak at poczta dot onet dot pl
Description:
------------
Strings sent as SOAP message parameters change when transported to server functions. This may result in a string cut or even in an encoding error "Encoding: Violation of encoding rules in client.php:"

Reproduce code:
---------------
[client]
<?php
$client = new SoapClient('a.wsdl');
$strA = 'test &amp; test';
$strB = 'test & test';
$res = $client->Test(array('strA'=>$strA, 'strB'=>$strB));
?>

[server]
<?php
function Test($param) {
	file_put_contents('test.txt', $param->strA."\n".$param->strB );
	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="strA" type="s:string"/>
				<s:attribute use="required" name="strB" type="s:string"/>
			</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 text.txt shall contain exactly the same values as calling parameters:

test &amp; test
test & test



Actual result:
--------------
The parameters are improperly decoded twice:

test & test
test 

(note: the second line is cut at "&")

Try to change a line in a client to:
$strA = 'test &xxx; test';

then you'll get an error "Encoding: Violation of encoding rules in client.php"


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-07-10 07:23 UTC] dmitry@php.net
Fixed in CVS HEAD and PHP_5_2.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 11:01:29 2024 UTC