From: Simon McVittie Date: Tue, 11 Jun 2013 18:20:55 +0000 (+0100) Subject: _dbus_system_logv: copy the va_list here too X-Git-Tag: dbus-1.7.4~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0553e53de04685588efacb961ae48384956db31d;p=thirdparty%2Fdbus.git _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 --- diff --git a/dbus/dbus-sysdeps-util-unix.c b/dbus/dbus-sysdeps-util-unix.c index 789729c7b..6265e2b5d 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);