printf-format-fix.c revision 4baf980b75800ad3595c39dc3b8d913f2686affd
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* Copyright (c) 2002-2016 Dovecot authors, see the included COPYING file */
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstatic const char *
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenfix_format_real(const char *fmt, const char *p, size_t *len_r)
287ba82a8da3eaa473b5735d4eeac2fb4c5d8117Timo Sirainen /* we'll assume that there's only one %m in the format string.
287ba82a8da3eaa473b5735d4eeac2fb4c5d8117Timo Sirainen this simplifies the code and there's really no good reason to have
c251a38df327599a62d341bf5c2282f31352faa5Timo Sirainen it multiple times. Callers can trap this case themselves. */
287ba82a8da3eaa473b5735d4eeac2fb4c5d8117Timo Sirainen /* @UNSAFE */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic const char *
1b3bb8d39686ed24730cbc31cc9a33dc62c8c6c3Timo Sirainenprintf_format_fix_noalloc(const char *format, size_t *len_r)
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen static const char *printf_skip_chars = "# -+'I.*0123456789hlLjzt";
24fc71a693331ffe77e2b6d81c70aca6fa055e47Timo Sirainen while (*p != '\0' && strchr(printf_skip_chars, *p) != NULL)
09c3a491f4f6ccebe290c7709bdc0d79a187610bTimo Sirainen switch (*p) {
return ret;
const char *ret;
return ret;
const char *ret;
return ret;