-/* $Cambridge: exim/src/src/dummies.c,v 1.4 2007/01/08 10:50:18 ph10 Exp $ */
-
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2007 */
+/* Copyright (c) University of Cambridge 1995 - 2009 */
/* See the file NOTICE for conditions of use and distribution. */
/* This file is not part of the main Exim code. There are little bits of test
/* We don't have the full Exim headers dragged in, but this function
is used for debugging output. */
-extern int string_vformat(char *, int, char *, va_list);
+extern gstring * string_vformat(gstring *, unsigned, const char *, va_list);
/*************************************************
vfprintf(stderr, format, ap);
fprintf(stderr, "\n");
va_end(ap);
-selector = selector; /* Keep picky compilers happy */
-flags = flags;
}
* Handle calls to print debug output *
*************************************************/
-/* The message just gets written to stderr
+/* The message just gets written to stderr.
+We use tainted memory to format into just so that we can handle
+tainted arguments.
Arguments:
format a printf() format
debug_printf(char *format, ...)
{
va_list ap;
-char buffer[1024];
+rmark reset_point = store_mark();
+gstring * g = string_get_tainted(1024, TRUE);
va_start(ap, format);
-if (!string_vformat(buffer, sizeof(buffer), format, ap))
+if (!string_vformat(g, 0, format, ap))
{
- char *s = "**** debug string overflowed buffer ****\n";
- char *p = buffer + (int)strlen(buffer);
- int maxlen = sizeof(buffer) - (int)strlen(s) - 3;
- if (p > buffer + maxlen) p = buffer + maxlen;
- if (p > buffer && p[-1] != '\n') *p++ = '\n';
+ char * s = "**** debug string overflowed buffer ****\n";
+ char * p = CS g->s + g->ptr;
+ int maxlen = g->size - (int)strlen(s) - 3;
+ if (p > g->s + maxlen) p = g->s + maxlen;
+ if (p > g->s && p[-1] != '\n') *p++ = '\n';
strcpy(p, s);
}
-fprintf(stderr, "%s", buffer);
+fprintf(stderr, "%s", string_from_gstring(g));
fflush(stderr);
+store_reset(reset_point);
va_end(ap);
}
void
sigalrm_handler(int sig)
{
-sig = sig; /* Keep picky compilers happy */
-sigalrm_seen = 1;
+sigalrm_seen = TRUE;
}
int
header_checkname(void *h, char *name, int len)
{
-h = h; /* Keep picky compilers happy */
-name = name;
-len = len;
return 0;
}
void
directory_make(char *parent, char *name, int mode, int panic)
{
-parent = parent; /* Keep picky compilers happy */
-name = name;
-mode = mode;
-panic = panic;
}
void
char *
host_ntoa(int type, const void *arg, char *buffer, int *portptr)
{
-type = type; /* Keep picky compilers happy */
-arg = arg;
-buffer = buffer;
-portptr = portptr;
return NULL;
}
#endif