test-printf-format-fix.c revision c398eca6b0fc6583687bd6fe2ee2dbcca2ae9387
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen/* Copyright (c) 2001-2017 Dovecot authors, see the included COPYING file */
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen/* Unit tests for printf-format-fix helper */
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila static const char *tests[] = {
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "Hello world",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "Embedded %%, %u, %f, %s, etc. are OK",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "Allow %#0- +s flags",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "duplicate flags in different args %0-123s %0-123s",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "Minimum length %9999s",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "Precision %.999s",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen "Precision %1.999s",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen "Length modifiers %hd %hhd %ld %lld %Lg %jd %zd %td",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen "Specifiers %s %u %d %c %i %x %X %p %o %e %E %f %F %g %G %a %A",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "%%doesn't cause confusion in %%m and %%n",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila unsigned int i;
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen test_assert_idx(printf_format_fix_get_len(tests[i], &len)
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila static const char *tests[] = {
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "OK to have a trailing %m",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "%m can appear at the start too",
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila "Even %m in the middle with a confusing %%m elsewhere is OK",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen unsigned int i;
4ef1f9f3293965734e6e3c38c191ceb2246a721fTeemu Huovila unsigned int needlen;
3dc5a231160859c9627157dc53a94d5e4494fe9fTeemu Huovila unsigned int offs;
3dc5a231160859c9627157dc53a94d5e4494fe9fTeemu Huovila test_assert_idx(memcmp(chgd, tests[i], offs) == 0, i);
2bb1ef0b669901fb91ff961e7fb074439ef769abTimo Sirainen test_assert_idx(memcmp(chgd+offs, needle, needlen) == 0, i);
2bb1ef0b669901fb91ff961e7fb074439ef769abTimo Sirainen test_assert_idx(strcmp(chgd+offs+needlen, tests[i]+offs+2) == 0, i);
16dd1fd16f0c6dbd4a057327370b432684e301ecTimo Sirainen chgd = printf_format_fix_get_len(tests[i], &len);
} T_END;
test_end();
void test_printf_format_fix()
static const char *fatals[] = {
test_end();
return FATAL_TEST_FINISHED;
if(stage == 0)
return FATAL_TEST_FAILURE;