Browse Source

Fixed bug #70469

Don't generate an E_ERROR if we've already thrown an exception.
This interacts badly with error_get_last() checks.
pull/2897/merge
Anton Artamonov 9 years ago
committed by Nikita Popov
parent
commit
1dfcd1af9a
  1. 4
      NEWS
  2. 20
      ext/soap/soap.c
  3. 20
      ext/soap/tests/bugs/bug70469.phpt

4
NEWS

@ -129,6 +129,10 @@ PHP NEWS
- SQLite3:
. Updated bundled libsqlite to 3.21.0. (cmb)
- Soap:
. Fixed bug #70469 (SoapClient generates E_ERROR even if exceptions=1 is
used). (Anton Artamonov)
- Standard:
. Fixed unzserialize(), to disable creation of unsupported data structures
through manually crafted strings. (Dmitry)

20
ext/soap/soap.c

@ -2147,8 +2147,6 @@ static void soap_error_handler(int error_num, const char *error_filename, const
char buffer[1024];
size_t buffer_len;
va_list argcopy;
zend_object **old_objects;
int old = PG(display_errors);
va_copy(argcopy, args);
buffer_len = vslprintf(buffer, sizeof(buffer)-1, format, argcopy);
@ -2165,24 +2163,6 @@ static void soap_error_handler(int error_num, const char *error_filename, const
add_soap_fault_ex(&fault, &SOAP_GLOBAL(error_object), code, buffer, NULL, NULL);
Z_ADDREF(fault);
zend_throw_exception_object(&fault);
old_objects = EG(objects_store).object_buckets;
EG(objects_store).object_buckets = NULL;
PG(display_errors) = 0;
SG(sapi_headers).http_status_line = NULL;
zend_try {
call_old_error_handler(error_num, error_filename, error_lineno, format, args);
} zend_catch {
CG(in_compilation) = _old_in_compilation;
EG(current_execute_data) = _old_current_execute_data;
if (SG(sapi_headers).http_status_line) {
efree(SG(sapi_headers).http_status_line);
}
SG(sapi_headers).http_status_line = _old_http_status_line;
SG(sapi_headers).http_response_code = _old_http_response_code;
} zend_end_try();
EG(objects_store).object_buckets = old_objects;
PG(display_errors) = old;
zend_bailout();
} else if (!use_exceptions ||
!SOAP_GLOBAL(error_code) ||

20
ext/soap/tests/bugs/bug70469.phpt

@ -0,0 +1,20 @@
--TEST--
Bug #70469 (SoapClient should not generate E_ERROR if exceptions enabled)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
try {
$x = new SoapClient('http://i_dont_exist.com/some.wsdl');
} catch (SoapFault $e) {
echo "catched\n";
}
$error = error_get_last();
if ($error === null) {
echo "ok\n";
}
?>
--EXPECT--
catched
ok
Loading…
Cancel
Save