From 844abf94571ffdd3e113c518947073ff5375d748 Mon Sep 17 00:00:00 2001 Message-Id: <844abf94571ffdd3e113c518947073ff5375d748.1714949244.git.mdw@distorted.org.uk> From: Mark Wooding Date: Fri, 19 Feb 2016 22:31:20 +0000 Subject: [PATCH] server/admin.c (a_vformat): Fix uses of `va_arg' to dereference `ap'. Organization: Straylight/Edgeware From: Mark Wooding This is the missing half of the earlier patch; without it, we get instant crashes on i386 (but, oddly, no warnings anywhere). --- server/admin.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/server/admin.c b/server/admin.c index 877f7ad2..b25e511e 100644 --- a/server/admin.c +++ b/server/admin.c @@ -272,7 +272,7 @@ void a_vformat(dstr *d, const char *fmt, va_list *ap) dstr_vputf(d, fmt + 1, ap); } else if (*fmt == '?') { if (strcmp(fmt, "?ADDR") == 0) { - const addr *a = va_arg(ap, const addr *); + const addr *a = va_arg(*ap, const addr *); switch (a->sa.sa_family) { case AF_INET: u_quotify(d, "INET"); @@ -283,8 +283,8 @@ void a_vformat(dstr *d, const char *fmt, va_list *ap) abort(); } } else if (strcmp(fmt, "?B64") == 0) { - const octet *p = va_arg(ap, const octet *); - size_t n = va_arg(ap, size_t); + const octet *p = va_arg(*ap, const octet *); + size_t n = va_arg(*ap, size_t); base64_ctx b64; dstr_putc(d, ' '); base64_init(&b64); @@ -294,10 +294,10 @@ void a_vformat(dstr *d, const char *fmt, va_list *ap) base64_encode(&b64, 0, 0, d); while (d->len && d->buf[d->len - 1] == '=') d->len--; } else if (strcmp(fmt, "?TOKENS") == 0) { - const char *const *av = va_arg(ap, const char *const *); + const char *const *av = va_arg(*ap, const char *const *); while (*av) u_quotify(d, *av++); } else if (strcmp(fmt, "?PEER") == 0) - u_quotify(d, p_name(va_arg(ap, peer *))); + u_quotify(d, p_name(va_arg(*ap, peer *))); else if (strcmp(fmt, "?ERRNO") == 0) { dstr_putf(d, " E%d", errno); u_quotify(d, strerror(errno)); @@ -309,7 +309,7 @@ void a_vformat(dstr *d, const char *fmt, va_list *ap) dstr_vputf(&dd, fmt, ap); u_quotify(d, dd.buf); } - fmt = va_arg(ap, const char *); + fmt = va_arg(*ap, const char *); } dstr_destroy(&dd); @@ -341,7 +341,7 @@ void a_format(dstr *d, const char *fmt, ...) * @const char *status@ = status code to report * @const char *tag@ = tag string, or null * @const char *fmt@ = pointer to format string - * @va_list ap@ = arguments in list + * @va_list *ap@ = arguments in list * @...@ = other arguments * * Returns: --- @@ -411,7 +411,7 @@ static void a_fail(admin *a, const char *fmt, ...) * @const char *fmt@ = pointer to format string * @const char *p@ = pointer to raw string * @size_t sz@ = size of raw string - * @va_list ap@ = arguments in list + * @va_list *ap@ = arguments in list * @...@ = other arguments * * Returns: --- -- [mdw]