Fixed bug #55541 errors spawn MessageBox, which blocks test automation

With that, also fixed bug #68297 (Application Popup provides too few
information) as a better error message is provided to the event log.

In the second case, the condition for display_startup_error was removed. The
condition was added as a fix for bug #30760 which was preventing the
MessageBox to appear. When display_startup_error=on, the error will be seen
on the console. But when running under a webserver it'll probably get lost,
so we need to log it other way into the event log (would be done automatically
when message box was used, but that would eventually cause issues of blocked
execution).

Generally speaking - any MessageBox or other graphical element is a potential
issue and that was repeatedly reported. Graphical elements shouldn't be used
in the core. Even being a rare one it can cause a bad situation where the
server is blocked. Yet some places have to cleaned up.
This commit is contained in:
Anatol Belski 2014-12-03 16:33:05 +01:00
parent 4d743eee5f
commit 65fce7f950
2 changed files with 8 additions and 5 deletions

View File

@ -29,6 +29,10 @@
#include "zend_ini_scanner.h"
#include "zend_extensions.h"
#ifdef PHP_WIN32
#include "win32/syslog.h"
#endif
#define YYERROR_VERBOSE
#define YYSTYPE zval
@ -179,10 +183,9 @@ static void ini_error(char *msg)
if (CG(ini_parser_unbuffered_errors)) {
#ifdef PHP_WIN32
MessageBox(NULL, error_buf, "PHP Error", MB_OK|MB_TOPMOST|0x00200000L);
#else
fprintf(stderr, "PHP: %s", error_buf);
syslog(LOG_ALERT, "PHP: %s (%s)", error_buf, GetCommandLine());
#endif
fprintf(stderr, "PHP: %s", error_buf);
} else {
zend_error(E_WARNING, "%s", error_buf);
}

View File

@ -1066,8 +1066,8 @@ static void php_error_cb(int type, const char *error_filename, const uint error_
if (!module_initialized || PG(log_errors)) {
char *log_buffer;
#ifdef PHP_WIN32
if ((type == E_CORE_ERROR || type == E_CORE_WARNING) && PG(display_startup_errors)) {
MessageBox(NULL, buffer, error_type_str, MB_OK|ZEND_SERVICE_MB_STYLE);
if (type == E_CORE_ERROR || type == E_CORE_WARNING) {
syslog(LOG_ALERT, "PHP %s: %s (%s)", error_type_str, buffer, GetCommandLine());
}
#endif
spprintf(&log_buffer, 0, "PHP %s: %s in %s on line %d", error_type_str, buffer, error_filename, error_lineno);