]> granicus.if.org Git - php/commitdiff
Fixed bug #42183 (classmap cause crashr in non-wsdl mode)
authorDmitry Stogov <dmitry@php.net>
Wed, 22 Aug 2007 14:18:10 +0000 (14:18 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 22 Aug 2007 14:18:10 +0000 (14:18 +0000)
NEWS
ext/soap/php_encoding.c
ext/soap/tests/bugs/bug42183.phpt [new file with mode: 0755]

diff --git a/NEWS b/NEWS
index 998e9ee3bc8dbe59fbdc690493f8cfab86e17965..60684613d4ed95d7ca54d6a5685ced99a47c8187 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? Aug 2007, PHP 5.2.4
+- Fixed bug #42183 (classmap cause crashr in non-wsdl mode). (Dmitry)
 - Fixed bug #42009 (is_a() and is_subclass_of() should NOT call autoload,
   in the same way as "instanceof" operator). (Dmitry)
 - Fixed bug #41904 (proc_open(): empty env array should cause empty
index 14b05e0210028926766dafa5884b7508a098ae94..197d07b0c20dbd9d3d33e2b29c59a5d3c1a860f9 100644 (file)
@@ -447,7 +447,10 @@ xmlNodePtr master_to_xml(encodePtr encode, zval *data, int style, xmlNodePtr par
                                    zend_hash_get_current_key_ex(SOAP_GLOBAL(class_map), &type_name, &type_len, &idx, 0, &pos) == HASH_KEY_IS_STRING) {
 
                                    /* TODO: namespace isn't stored */
-                               encodePtr enc = get_encoder(SOAP_GLOBAL(sdl), SOAP_GLOBAL(sdl)->target_ns, type_name);
+                               encodePtr enc = NULL;
+                               if (SOAP_GLOBAL(sdl)) {
+                                       enc = get_encoder(SOAP_GLOBAL(sdl), SOAP_GLOBAL(sdl)->target_ns, type_name);
+                               }
                                if (enc) {
                                        encode = enc;
                                        } else if (SOAP_GLOBAL(sdl)) {
diff --git a/ext/soap/tests/bugs/bug42183.phpt b/ext/soap/tests/bugs/bug42183.phpt
new file mode 100755 (executable)
index 0000000..d34311f
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Bug #42183 (classmap cause crash in non-wsdl mode )
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+class PHPObject {
+}
+
+$req = <<<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.sit.com" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:test/></SOAP-ENV:Body></SOAP-ENV:Envelope>
+EOF;
+
+function test() {
+       return new PHPObject();
+}
+
+$server = new SoapServer(NULL, array('uri' => 'http://ws.sit.com', 
+       'classmap' => array('Object' => 'PHPObject')));
+$server->addFunction("test");
+ob_start();
+$server->handle($req);
+ob_end_clean();
+echo "ok\n";
+--EXPECT--
+ok