[obfsproxy/master] Use va_copy; do not use the same va_list twice. fix bug 5078

commit a195187bfaea90324179a18aa87df2628d6b4ec3 Author: Nick Mathewson <nickm@torproject.org> Date: Fri Feb 10 12:36:58 2012 -0500 Use va_copy; do not use the same va_list twice. fix bug 5078 --- configure.ac | 15 +++++++++++++++ src/managed.c | 11 +++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 3809750..4105990 100644 --- a/configure.ac +++ b/configure.ac @@ -50,6 +50,21 @@ LIBS="$save_LIBS" AC_C_INLINE AC_CHECK_SIZEOF(int) +dnl check for working va_copy. It could be a function or a macro. +AC_MSG_CHECKING([whether we have va_copy]) +AC_CACHE_VAL(obfs_cv_have_vacopy, + AC_TRY_LINK([#include <stdarg.h>], [ + va_list ap, ap2; + va_copy(ap, ap2); + ], [obfs_cv_have_vacopy=true], + [obfs_cv_have_vacopy=false])) +if test "$obfs_cv_have_vacopy" = true; then + AC_DEFINE(HAVE_VA_COPY, 1, [True if this platform has the standard va_copy macro]) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + ### Output ### AC_CONFIG_FILES([Makefile]) diff --git a/src/managed.c b/src/managed.c index dfd8a3f..01814f8 100644 --- a/src/managed.c +++ b/src/managed.c @@ -142,16 +142,23 @@ log_proxy_env(managed_proxy_t *proxy) static void print_protocol_line(const char *format, ...) { - va_list ap; + va_list ap, ap2; va_start(ap,format); +#ifdef HAVE_VA_COPY + va_copy(ap2, ap); +#else + memcpy(&ap2, &ap, sizeof(ap)); +#endif + vprintf(format, ap); fflush(stdout); /* log the protocol message */ log_debug("We sent:"); - log_debug_raw(format, ap); + log_debug_raw(format, ap2); va_end(ap); + va_end(ap2); } /**
participants (1)
-
nickm@torproject.org