Merge branch 'jk/vreport-sanitize'

An error message with an ASCII control character like '\r' in it
can alter the message to hide its early part, which is problematic
when a remote side gives such an error message that the local side
will relay with a "remote: " prefix.

* jk/vreport-sanitize:
  vreport: sanitize ASCII control chars
  Revert "vreportf: avoid intermediate buffer"
This commit is contained in:
Junio C Hamano 2017-01-31 13:14:56 -08:00
commit daf75f2e6b

17
usage.c
View File

@ -7,21 +7,19 @@
#include "cache.h"
static FILE *error_handle;
static int tweaked_error_buffering;
void vreportf(const char *prefix, const char *err, va_list params)
{
char msg[4096];
FILE *fh = error_handle ? error_handle : stderr;
char *p;
fflush(fh);
if (!tweaked_error_buffering) {
setvbuf(fh, NULL, _IOLBF, 0);
tweaked_error_buffering = 1;
vsnprintf(msg, sizeof(msg), err, params);
for (p = msg; *p; p++) {
if (iscntrl(*p) && *p != '\t' && *p != '\n')
*p = '?';
}
fputs(prefix, fh);
vfprintf(fh, err, params);
fputc('\n', fh);
fprintf(fh, "%s%s\n", prefix, msg);
}
static NORETURN void usage_builtin(const char *err, va_list params)
@ -93,7 +91,6 @@ void set_die_is_recursing_routine(int (*routine)(void))
void set_error_handle(FILE *fh)
{
error_handle = fh;
tweaked_error_buffering = 0;
}
void NORETURN usagef(const char *err, ...)