Skip to content

Commit

Permalink
die_errno(): double % in strerror() output just in case
Browse files Browse the repository at this point in the history
[tr: handle border case where % is placed at end of buffer]

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Jun 27, 2009
1 parent b875036 commit f8b5a8e
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions usage.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,24 @@ void die_errno(const char *fmt, ...)
{
va_list params;
char fmt_with_err[1024];

snprintf(fmt_with_err, sizeof(fmt_with_err), "%s: %s", fmt, strerror(errno));
char str_error[256], *err;
int i, j;

err = strerror(errno);
for (i = j = 0; err[i] && j < sizeof(str_error) - 1; ) {
if ((str_error[j++] = err[i++]) != '%')
continue;
if (j < sizeof(str_error) - 1) {
str_error[j++] = '%';
} else {
/* No room to double the '%', so we overwrite it with
* '\0' below */
j--;
break;
}
}
str_error[j] = 0;
snprintf(fmt_with_err, sizeof(fmt_with_err), "%s: %s", fmt, str_error);

va_start(params, fmt);
die_routine(fmt_with_err, params);
Expand Down

0 comments on commit f8b5a8e

Please sign in to comment.