test-istream-attachment.c revision aab5704d21173f9f825c016812c8099d16ea5b9f
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen/* Copyright (c) 2007-2016 Dovecot authors, see the included COPYING file */
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen#define BINARY_TEXT_LONG "we have\ra lot \nof \0binary stuff in here\n" \
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"b adjig sadjg jasidgjiaehga3wht8a3w8ghxjc dsgad hasdghsd gasd ds" \
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"jdsoga sjdga0w3tjhawjgsertniq3n5oqerjqw2r89q23h awhrqh835r8a"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"d2UgaGF2ZQ1hIGxvdCAKb2YgAGJpbmFyeSBzdHVmZiBpbiBoZXJlCmIgYWRqaWcgc2FkamcgamFz\r\n" \
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"aWRnamlhZWhnYTN3aHQ4YTN3OGdoeGpjIGRzZ2FkIGhhc2RnaHNkIGdhc2QgZHNqZHNvZ2Egc2pk\r\n" \
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"Z2EwdzN0amhhd2pnc2VydG5pcTNuNW9xZXJqcXcycjg5cTIzaCBhd2hycWg4MzVyOGE="
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainenstatic const char mail_input[] =
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"MIME-Version: 1.0\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"Content-Type: multipart/alternative;\r\n boundary=\"bound\"\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"mime header\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"\r\n--bound\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"Content-Transfer-Encoding: base64\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"Content-Type: text/plain\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"\r\n--bound\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"Content-Type: text/plain\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"Content-Transfer-Encoding: base64\r\n"
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"\r\n--bound--\r\n";
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainenstatic const char mail_output[] =
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen"MIME-Version: 1.0\r\n"
b162e16ade1e0d9bfae62e366caf57a3132f5963Timo Sirainen"Content-Type: multipart/alternative;\r\n boundary=\"bound\"\r\n"
b162e16ade1e0d9bfae62e366caf57a3132f5963Timo Sirainen"mime header\r\n"
b162e16ade1e0d9bfae62e366caf57a3132f5963Timo Sirainen"\r\n--bound\r\n"
b162e16ade1e0d9bfae62e366caf57a3132f5963Timo Sirainen"Content-Transfer-Encoding: base64\r\n"
b162e16ade1e0d9bfae62e366caf57a3132f5963Timo Sirainen"Content-Type: text/plain\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"\r\n--bound\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"Content-Type: text/plain\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"Content-Transfer-Encoding: base64\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"\r\n--bound--\r\n";
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainenstatic const char *mail_broken_input_body_prefix =
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"MIME-Version: 1.0\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"Content-Type: multipart/alternative;\r\n boundary=\"bound\"\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"Content-Transfer-Encoding: base64\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen"Content-Type: text/plain\r\n"
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainenstatic const char *mail_broken_input_bodies[] = {
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen /* broken base64 input */
b162e16ade1e0d9bfae62e366caf57a3132f5963Timo Sirainen /* extra whitespace */
96e1ed172ae59cae6bc6e6ddd24d22a158e23dfeTimo Sirainen "Zm9v\n Zm9v\n",
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen "Zm9v \nZm9v\n",
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen /* mixed LF vs CRLFs */
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen "Zm9vYmFy\r\nZm9vYmFy\n",
b2ff0468c298dd2f525fff5977f1f24fba3a9f3bTimo Sirainen "Zm9vYmFy\nZm9vYmFy\r\n",
static const char *mail_nonbroken_input_bodies[] = {
struct attachment {
unsigned int base64_blocks_per_line;
int fd;
return fd;
struct attachment *a;
i_unreached();
const char **error_r,
struct attachment *a;
i_unreached();
if (success)
static struct istream *
const struct attachment *a;
const char *error;
i_unreached();
const char *error;
i_unreached();
const unsigned char *data;
int ret = 0;
return ret;
static void test_istream_attachment(void)
const unsigned char *data;
int ret;
test_end();
char *mail_text;
const unsigned char *data;
int ret;
bool unchanged;
if (err_type != 0) {
goto cleanup;
return unchanged;
static void test_istream_attachment_extractor(void)
test_end();
static void test_istream_attachment_extractor_error(void)
test_end();
int ret = 0;
lib_init();
path);
lib_deinit();
return ret;
static void (*const test_functions[])(void) = {