From 0553e53de04685588efacb961ae48384956db31d Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Tue, 11 Jun 2013 19:20:55 +0100 Subject: _dbus_system_logv: copy the va_list here too This would crash if HAVE_SYSLOG_H is defined, HAVE_DECL_LOG_PERROR is false, and the platform calling convention is that va_list is a struct. Verified on Linux by undefining HAVE_DECL_LOG_PERROR. Reviewed-by: Colin Walters --- dbus/dbus-sysdeps-util-unix.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'dbus/dbus-sysdeps-util-unix.c') diff --git a/dbus/dbus-sysdeps-util-unix.c b/dbus/dbus-sysdeps-util-unix.c index 789729c7..6265e2b5 100644 --- a/dbus/dbus-sysdeps-util-unix.c +++ b/dbus/dbus-sysdeps-util-unix.c @@ -477,6 +477,7 @@ _dbus_system_log (DBusSystemLogSeverity severity, const char *msg, ...) void _dbus_system_logv (DBusSystemLogSeverity severity, const char *msg, va_list args) { + va_list tmp; #ifdef HAVE_SYSLOG_H int flags; switch (severity) @@ -494,14 +495,14 @@ _dbus_system_logv (DBusSystemLogSeverity severity, const char *msg, va_list args return; } - vsyslog (flags, msg, args); + DBUS_VA_COPY (tmp, args); + vsyslog (flags, msg, tmp); + va_end (tmp); #endif #if !defined(HAVE_SYSLOG_H) || !HAVE_DECL_LOG_PERROR { /* vsyslog() won't write to stderr, so we'd better do it */ - va_list tmp; - DBUS_VA_COPY (tmp, args); fprintf (stderr, "dbus[" DBUS_PID_FORMAT "]: ", _dbus_getpid ()); vfprintf (stderr, msg, tmp); -- cgit v1.2.1