Skip to content

Commit 582ccff

Browse files
committed
ext/soap: Convert bailouts to normal exception throwing in SoapClient::__constructor()
Use ValueErrors as the conditions checked are programming errors
1 parent a405241 commit 582ccff

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

ext/soap/soap.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,8 +1935,6 @@ PHP_METHOD(SoapClient, __construct)
19351935
RETURN_THROWS();
19361936
}
19371937

1938-
SOAP_CLIENT_BEGIN_CODE();
1939-
19401938
cache_wsdl = SOAP_GLOBAL(cache_enabled) ? SOAP_GLOBAL(cache_mode) : 0;
19411939

19421940
if (options != NULL) {
@@ -1949,7 +1947,8 @@ PHP_METHOD(SoapClient, __construct)
19491947
Z_TYPE_P(tmp) == IS_STRING) {
19501948
ZVAL_STR_COPY(Z_CLIENT_URI_P(this_ptr), Z_STR_P(tmp));
19511949
} else {
1952-
php_error_docref(NULL, E_ERROR, "'uri' option is required in nonWSDL mode");
1950+
zend_argument_value_error(2, "must provide \"uri\" option as it is required in nonWSDL mode");
1951+
RETURN_THROWS();
19531952
}
19541953

19551954
if ((tmp = zend_hash_str_find(ht, "style", sizeof("style")-1)) != NULL &&
@@ -1977,7 +1976,8 @@ PHP_METHOD(SoapClient, __construct)
19771976
Z_TYPE_P(tmp) == IS_STRING) {
19781977
ZVAL_STR_COPY(Z_CLIENT_LOCATION_P(this_ptr), Z_STR_P(tmp));
19791978
} else if (!wsdl) {
1980-
php_error_docref(NULL, E_ERROR, "'location' option is required in nonWSDL mode");
1979+
zend_argument_value_error(2, "must provide \"location\" option as it is required in nonWSDL mode");
1980+
RETURN_THROWS();
19811981
}
19821982

19831983
if ((tmp = zend_hash_str_find(ht, "soap_version", sizeof("soap_version")-1)) != NULL) {
@@ -2056,7 +2056,8 @@ PHP_METHOD(SoapClient, __construct)
20562056

20572057
encoding = xmlFindCharEncodingHandler(Z_STRVAL_P(tmp));
20582058
if (encoding == NULL) {
2059-
php_error_docref(NULL, E_ERROR, "Invalid 'encoding' option - '%s'", Z_STRVAL_P(tmp));
2059+
zend_argument_value_error(2, "provided \"encoding\" option \"%s\" is invalid", Z_STRVAL_P(tmp));
2060+
RETURN_THROWS();
20602061
} else {
20612062
xmlCharEncCloseFunc(encoding);
20622063
ZVAL_STR_COPY(Z_CLIENT_ENCODING_P(this_ptr), Z_STR_P(tmp));
@@ -2112,10 +2113,15 @@ PHP_METHOD(SoapClient, __construct)
21122113
"The \"ssl_method\" option is deprecated. "
21132114
"Use \"ssl\" stream context options instead");
21142115
}
2115-
} else if (!wsdl) {
2116-
php_error_docref(NULL, E_ERROR, "'location' and 'uri' options are required in nonWSDL mode");
21172116
}
21182117

2118+
if (options == NULL && wsdl == NULL) {
2119+
zend_argument_value_error(2, "must provide \"uri\" and \"location\" options as they are required in nonWSDL mode");
2120+
RETURN_THROWS();
2121+
}
2122+
2123+
SOAP_CLIENT_BEGIN_CODE();
2124+
21192125
ZVAL_LONG(Z_CLIENT_SOAP_VERSION_P(this_ptr), soap_version);
21202126

21212127
if (wsdl) {

ext/soap/tests/SoapClient/invalid-encoding-option.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ try {
2525

2626
?>
2727
--EXPECT--
28-
SoapFault: SoapClient::__construct(): Invalid 'encoding' option - 'non-sense'
29-
SoapFault: SoapClient::__construct(): Invalid 'encoding' option - 'non-sense'
28+
ValueError: SoapClient::__construct(): Argument #2 ($options) provided "encoding" option "non-sense" is invalid
29+
ValueError: SoapClient::__construct(): Argument #2 ($options) provided "encoding" option "non-sense" is invalid

ext/soap/tests/SoapClient/missing-options-non-wsdl-mode.phpt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ try {
4848
?>
4949
--EXPECT--
5050
$options not provided
51-
SoapFault: SoapClient::__construct(): 'location' and 'uri' options are required in nonWSDL mode
52-
SoapFault: SoapClient::__construct(): 'location' and 'uri' options are required in nonWSDL mode
51+
ValueError: SoapClient::__construct(): Argument #2 ($options) must provide "uri" and "location" options as they are required in nonWSDL mode
52+
ValueError: SoapClient::__construct(): Argument #2 ($options) must provide "uri" and "location" options as they are required in nonWSDL mode
5353
Empty $options array
54-
SoapFault: SoapClient::__construct(): 'uri' option is required in nonWSDL mode
55-
SoapFault: SoapClient::__construct(): 'uri' option is required in nonWSDL mode
54+
ValueError: SoapClient::__construct(): Argument #2 ($options) must provide "uri" option as it is required in nonWSDL mode
55+
ValueError: SoapClient::__construct(): Argument #2 ($options) must provide "uri" option as it is required in nonWSDL mode
5656
$options array only sets "uri" option
57-
SoapFault: SoapClient::__construct(): 'location' option is required in nonWSDL mode
58-
SoapFault: SoapClient::__construct(): 'location' option is required in nonWSDL mode
57+
ValueError: SoapClient::__construct(): Argument #2 ($options) must provide "location" option as it is required in nonWSDL mode
58+
ValueError: SoapClient::__construct(): Argument #2 ($options) must provide "location" option as it is required in nonWSDL mode

0 commit comments

Comments
 (0)