chiark / gitweb /
server/admin.c (a_vformat): Fix uses of `va_arg' to dereference `ap'.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 19 Feb 2016 22:31:20 +0000 (22:31 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 30 Apr 2016 17:11:38 +0000 (18:11 +0100)
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

index 877f7ad..b25e511 100644 (file)
@@ -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:    ---