mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-16259: Soap segfault when classmap instantiation fails
This commit is contained in:
commit
0d564deed8
2 changed files with 38 additions and 5 deletions
|
@ -1457,7 +1457,9 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
object_init_ex(ret, ce);
|
if (object_init_ex(ret, ce) != SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
master_to_zval_int(&base, enc, data);
|
master_to_zval_int(&base, enc, data);
|
||||||
set_zval_property(ret, "_", &base);
|
set_zval_property(ret, "_", &base);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1466,7 +1468,9 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z
|
||||||
if (soap_check_xml_ref(ret, data)) {
|
if (soap_check_xml_ref(ret, data)) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
object_init_ex(ret, ce);
|
if (object_init_ex(ret, ce) != SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
soap_add_xml_ref(ret, data);
|
soap_add_xml_ref(ret, data);
|
||||||
}
|
}
|
||||||
} else if (sdlType->kind == XSD_TYPEKIND_EXTENSION &&
|
} else if (sdlType->kind == XSD_TYPEKIND_EXTENSION &&
|
||||||
|
@ -1511,7 +1515,9 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
object_init_ex(ret, ce);
|
if (object_init_ex(ret, ce) != SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
soap_add_xml_ref(ret, data);
|
soap_add_xml_ref(ret, data);
|
||||||
master_to_zval_int(&base, sdlType->encode, data);
|
master_to_zval_int(&base, sdlType->encode, data);
|
||||||
set_zval_property(ret, "_", &base);
|
set_zval_property(ret, "_", &base);
|
||||||
|
@ -1522,7 +1528,9 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z
|
||||||
if (soap_check_xml_ref(ret, data)) {
|
if (soap_check_xml_ref(ret, data)) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
object_init_ex(ret, ce);
|
if (object_init_ex(ret, ce) != SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
soap_add_xml_ref(ret, data);
|
soap_add_xml_ref(ret, data);
|
||||||
}
|
}
|
||||||
if (sdlType->model) {
|
if (sdlType->model) {
|
||||||
|
@ -1582,7 +1590,9 @@ static zval *to_zval_object_ex(zval *ret, encodeTypePtr type, xmlNodePtr data, z
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
object_init_ex(ret, ce);
|
if (object_init_ex(ret, ce) != SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
soap_add_xml_ref(ret, data);
|
soap_add_xml_ref(ret, data);
|
||||||
trav = data->children;
|
trav = data->children;
|
||||||
|
|
||||||
|
|
23
ext/soap/tests/bugs/gh16259.phpt
Normal file
23
ext/soap/tests/bugs/gh16259.phpt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
--TEST--
|
||||||
|
GH-16259 (Soap segfault when classmap instantiation fails)
|
||||||
|
--EXTENSIONS--
|
||||||
|
soap
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
abstract class CT_A1 {
|
||||||
|
}
|
||||||
|
class CT_A2 extends CT_A1 {
|
||||||
|
}
|
||||||
|
|
||||||
|
$classMap = array("A1" => "CT_A1", "A2" => "CT_A2");
|
||||||
|
$client = new SoapClient(__DIR__."/bug36575.wsdl", array("trace" => 1, "exceptions" => 0));
|
||||||
|
$a2 = new CT_A2();
|
||||||
|
$client->test($a2);
|
||||||
|
$soapRequest = $client->__getLastRequest();
|
||||||
|
|
||||||
|
$server = new SoapServer(__DIR__."/bug36575.wsdl", array("classmap" => $classMap));
|
||||||
|
$server->handle($soapRequest);
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Cannot instantiate abstract class CT_A1</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
|
Loading…
Add table
Add a link
Reference in a new issue