This commit is contained in:
Nikita Popov 2017-12-23 13:34:17 +01:00
parent 66c8a9d672
commit 688b9136ab
4 changed files with 49 additions and 23 deletions

6
NEWS
View File

@ -25,11 +25,13 @@ PHP NEWS
(pmmaga)
. Fixed bug #75677 (Clang ignores fastcall calling convention on variadic
function). (Li-Wen Hsu)
. Fixed bug #54043 (Remove inconsitency of internal exceptions and user
defined exceptions). (Nikita)
- BCMath:
. Fixed bug #66364 (BCMath bcmul ignores scale parameter). (cmb)
. Implemented request #67855 (No way to get current scale in use). (Chris
Wright, cmb)
. Implemented request #67855 (No way to get current scale in use). (Chris
Wright, cmb)
. Fixed bug #75164 (split_bc_num() is pointless). (cmb)
. Fixed bug #75169 (BCMath errors/warnings bypass PHP's error handling). (cmb)

View File

@ -24,6 +24,10 @@ Core:
some old options removed. This is now written in PHP and has no external
dependencies.
. Support for BeOS has been dropped.
. Exceptions thrown due to automatic conversion of warnings into exceptions
in EH_THROW mode (e.g. some DateTime exceptions) no longer populate
error_get_last() state. As such, they now work the same way as manually
thrown exceptions.
BCMath:
. All warnings thrown by BCMath functions are now using PHP's error handling.

20
Zend/tests/bug54043.phpt Normal file
View File

@ -0,0 +1,20 @@
--TEST--
Bug #54043: Remove inconsitency of internal exceptions and user defined exceptions
--FILE--
<?php
$time = '9999-11-33'; // obviously invalid ;-)
$timeZone = new DateTimeZone('UTC');
try {
$dateTime = new DateTime($time, $timeZone);
} catch (Exception $e) {
var_dump($e->getMessage());
}
var_dump(error_get_last());
?>
--EXPECT--
string(105) "DateTime::__construct(): Failed to parse time string (9999-11-33) at position 9 (3): Unexpected character"
NULL

View File

@ -1053,27 +1053,6 @@ static ZEND_COLD void php_error_cb(int type, const char *error_filename, const u
display = 1;
}
/* store the error if it has changed */
if (display) {
if (PG(last_error_message)) {
char *s = PG(last_error_message);
PG(last_error_message) = NULL;
free(s);
}
if (PG(last_error_file)) {
char *s = PG(last_error_file);
PG(last_error_file) = NULL;
free(s);
}
if (!error_filename) {
error_filename = "Unknown";
}
PG(last_error_type) = type;
PG(last_error_message) = strdup(buffer);
PG(last_error_file) = strdup(error_filename);
PG(last_error_lineno) = error_lineno;
}
/* according to error handling mode, throw exception or show it */
if (EG(error_handling) == EH_THROW) {
switch (type) {
@ -1105,6 +1084,27 @@ static ZEND_COLD void php_error_cb(int type, const char *error_filename, const u
}
}
/* store the error if it has changed */
if (display) {
if (PG(last_error_message)) {
char *s = PG(last_error_message);
PG(last_error_message) = NULL;
free(s);
}
if (PG(last_error_file)) {
char *s = PG(last_error_file);
PG(last_error_file) = NULL;
free(s);
}
if (!error_filename) {
error_filename = "Unknown";
}
PG(last_error_type) = type;
PG(last_error_message) = strdup(buffer);
PG(last_error_file) = strdup(error_filename);
PG(last_error_lineno) = error_lineno;
}
/* display/log the error if necessary */
if (display && (EG(error_reporting) & type || (type & E_CORE))
&& (PG(log_errors) || PG(display_errors) || (!module_initialized))) {