summaryrefslogtreecommitdiff
path: root/win32/wsyslog.c
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2018-07-06 13:59:14 +0200
committerAnatol Belski <ab@php.net>2018-07-06 16:07:28 +0200
commit246cb03e261a8fb499a1cdb70d609a19c26a6574 (patch)
treee877da186a931923db7c6fbc0bfc412d8778c2da /win32/wsyslog.c
parent3847a6fcb63c362548e9434b195232f2dcf7a6c7 (diff)
downloadphp-git-246cb03e261a8fb499a1cdb70d609a19c26a6574.tar.gz
Fix event log handling in startup phase
The log header can be saved in the globals on startup. At the same time, the log header can be changed per request. In case that happened, wrong pointer will be free'd on shutdown. It can happen at any point when zend_error() or similar is called at startup, like for example in the case of the ini deprecation warnings. Thus, ZMM cannot be used here.
Diffstat (limited to 'win32/wsyslog.c')
-rw-r--r--win32/wsyslog.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/win32/wsyslog.c b/win32/wsyslog.c
index 6b0f03e8ea..73f9969a78 100644
--- a/win32/wsyslog.c
+++ b/win32/wsyslog.c
@@ -66,7 +66,7 @@ void closelog(void)
PW32G(log_source) = INVALID_HANDLE_VALUE;
}
if (PW32G(log_header)) {
- efree(PW32G(log_header));
+ free(PW32G(log_header));
PW32G(log_header) = NULL;
}
}
@@ -112,7 +112,6 @@ void syslog(int priority, const char *message, ...)
efree(tmp);
}
-
/* Emulator for BSD openlog() routine
* Accepts: identity
* options
@@ -121,11 +120,14 @@ void syslog(int priority, const char *message, ...)
void openlog(const char *ident, int logopt, int facility)
{
+ size_t header_len;
closelog();
PW32G(log_source) = RegisterEventSource(NULL, "PHP-" PHP_VERSION);
- spprintf(&PW32G(log_header), 0, (logopt & LOG_PID) ? "%s[%d]" : "%s", ident, getpid());
+ header_len = strlen(ident) + 2 + 11;
+ PW32G(log_header) = malloc(header_len*sizeof(char));
+ sprintf_s(PW32G(log_header), header_len, (logopt & LOG_PID) ? "%s[%d]" : "%s", ident, getpid());
}
/*