X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/328895cc07b8caf8c18003569431a02129989289..d8fbda7da9eb20f98b89f625e8a77eacc443757d:/src/src/filtertest.c diff --git a/src/src/filtertest.c b/src/src/filtertest.c index 10af6b596..87ebfb14f 100644 --- a/src/src/filtertest.c +++ b/src/src/filtertest.c @@ -1,10 +1,9 @@ -/* $Cambridge: exim/src/src/filtertest.c,v 1.9 2006/10/24 12:56:06 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2006 */ +/* Copyright (c) The Exim Maintainers 2021 - 2022 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -47,11 +46,11 @@ body_len = 0; body_linecount = 0; header_size = message_size; -if (!dot_ended && !feof(stdin)) +if (!dot_ended && !stdin_feof()) { - if (!dot_ends) + if (!f.dot_ends) { - while ((ch = getc(stdin)) != EOF) + while ((ch = stdin_getc(GETC_BUFFER_UNLIMITED)) != EOF) { if (ch == 0) body_zerocount++; if (ch == '\n') body_linecount++; @@ -64,7 +63,7 @@ if (!dot_ended && !feof(stdin)) else { int ch_state = 1; - while ((ch = getc(stdin)) != EOF) + while ((ch = stdin_getc(GETC_BUFFER_UNLIMITED)) != EOF) { if (ch == 0) body_zerocount++; switch (ch_state) @@ -97,10 +96,11 @@ if (!dot_ended && !feof(stdin)) if (s > message_body_end + message_body_visible) s = message_body_end; message_size++; } - READ_END: ch = ch; /* Some compilers don't like null statements */ + READ_END: ; } if (s == message_body_end || s[-1] != '\n') body_linecount++; } +debug_printf("%s %d\n", __FUNCTION__, __LINE__); message_body[body_len] = 0; message_body_size = message_size - header_size; @@ -114,7 +114,7 @@ if (body_len >= message_body_visible) int above = message_body_visible - below; if (above > 0) { - uschar *temp = store_get(below); + uschar * temp = store_get(below, GET_UNTAINTED); memcpy(temp, message_body_end, below); memmove(message_body_end, s+1, above); memcpy(message_body_end + above, temp, below); @@ -180,7 +180,7 @@ if (fstat(fd, &statbuf) != 0) return FALSE; } -filebuf = store_get(statbuf.st_size + 1); +filebuf = store_get(statbuf.st_size + 1, filename); rc = read(fd, filebuf, statbuf.st_size); (void)close(fd); @@ -252,7 +252,7 @@ if (filter_type == FILTER_FORWARD) /* For a filter, set up the message_body variables and the message size if this is the first time this function has been called. */ -if (message_body == NULL) read_message_body(dot_ended); +if (!message_body) read_message_body(dot_ended); /* Now pass the filter file to the function that interprets it. Because filter_test is not FILTER_NONE, the interpreter will output comments about what @@ -261,20 +261,19 @@ testing a system filter that is going to be followed by a user filter test. */ if (is_system) { - system_filtering = TRUE; - enable_dollar_recipients = TRUE; /* Permit $recipients in system filter */ + f.system_filtering = TRUE; + f.enable_dollar_recipients = TRUE; /* Permit $recipients in system filter */ yield = filter_interpret (filebuf, RDO_DEFER|RDO_FAIL|RDO_FILTER|RDO_FREEZE|RDO_REWRITE, &generated, &error); - enable_dollar_recipients = FALSE; - system_filtering = FALSE; + f.enable_dollar_recipients = FALSE; + f.system_filtering = FALSE; } else { - yield = (filter_type == FILTER_SIEVE)? - sieve_interpret(filebuf, RDO_REWRITE, NULL, NULL, NULL, &generated, &error) - : - filter_interpret(filebuf, RDO_REWRITE, &generated, &error); + yield = filter_type == FILTER_SIEVE + ? sieve_interpret(filebuf, RDO_REWRITE, NULL, NULL, NULL, NULL, &generated, &error) + : filter_interpret(filebuf, RDO_REWRITE, &generated, &error); } return yield != FF_ERROR;