void rfc2822_header_utf8_printf (string_t *header, const char *name, const char *fmt, ...) { string_t *body = t_str_new(256); va_list args; va_start(args, fmt); message_header_encode(t_strdup_vprintf(fmt, args), body); va_end(args); rfc2822_header_write(header, name, str_c(body)); }
static void test_message_header_encode(void) { const char *data[] = { "a b", "a b", "a bc\xC3\xA4""de f", "a =?utf-8?q?bc=C3=A4de?= f", "a \xC3\xA4\xC3\xA4 \xC3\xA4 b", "a =?utf-8?b?w6TDpCDDpA==?= b", "\xC3\xA4 a \xC3\xA4", "=?utf-8?q?=C3=A4_a_=C3=A4?=", "\xC3\xA4\xC3\xA4 a \xC3\xA4", "=?utf-8?b?w6TDpCBhIMOk?=", "=", "=", "?", "?", "a=?", "a=?", "=?", "=?utf-8?q?=3D=3F?=", "=?x", "=?utf-8?q?=3D=3Fx?=", "a\n=?", "a\n\t=?utf-8?q?=3D=3F?=", "a\t=?", "a\t=?utf-8?q?=3D=3F?=", "a =?", "a =?utf-8?q?=3D=3F?=", "foo\001bar", "=?utf-8?q?foo=01bar?=", "\x01\x02\x03\x04\x05\x06\x07\x08", "=?utf-8?b?AQIDBAUGBwg=?=", "a\r\n b", "a\r\n b", "a\r\n\tb", "a\r\n\tb", "a\r\nb", "a\r\n\tb", "a\n b", "a\n b", "a\n b", "a\n b", "a\nb", "a\n\tb", "a\r\n", "a", "a\n", "a", "foo\n \001bar", "foo\n =?utf-8?q?=01bar?=", "foo\001\n bar", "=?utf-8?q?foo=01?=\n bar" }; string_t *str = t_str_new(128); unsigned int i; test_begin("message header encode"); for (i = 0; i < N_ELEMENTS(data); i += 2) { str_truncate(str, 0); message_header_encode(data[i], str); test_assert(strcmp(str_c(str), data[i+1]) == 0); } test_end(); }