X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Fheader.c;h=decd0cce69a107e43b141314a62381954295e566;hb=31beb7972466a33a88770eacbce13490f2ddadc2;hp=1186dd9381ae99c0ccb1d3ea67aeb16b60c4ad21;hpb=184e88237dea64ce48076cdd0184612d057cbafd;p=exim.git diff --git a/src/src/header.c b/src/src/header.c index 1186dd938..decd0cce6 100644 --- a/src/src/header.c +++ b/src/src/header.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/header.c,v 1.6 2007/01/08 10:50:18 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2007 */ +/* Copyright (c) University of Cambridge 1995 - 2016 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -30,7 +28,7 @@ Returns: TRUE or FALSE */ BOOL -header_testname(header_line *h, uschar *name, int len, BOOL notdel) +header_testname(header_line *h, const uschar *name, int len, BOOL notdel) { uschar *tt; if (h->type == '*' && notdel) return FALSE; @@ -46,7 +44,8 @@ return *tt == ':'; header_testname() above. */ BOOL -header_testname_incomplete(header_line *h, uschar *name, int len, BOOL notdel) +header_testname_incomplete(header_line *h, const uschar *name, + int len, BOOL notdel) { if (h->type == '*' && notdel) return FALSE; if (h->text == NULL || strncmpic(h->text, name, len) != 0) return FALSE; @@ -92,7 +91,7 @@ Returns: nothing static void header_add_backend(BOOL after, uschar *name, BOOL topnot, int type, - char *format, va_list ap) + const char *format, va_list ap) { header_line *h, *new; header_line **hptr; @@ -118,7 +117,14 @@ if (name == NULL) else { hptr = &header_list; - h = header_list; + + /* header_list->text can be NULL if we get here between when the new + received header is allocated and when it is actually filled in. We want + that header to be first, so skip it for now. */ + + if (header_list->text == NULL) + hptr = &header_list->next; + h = *hptr; } } @@ -126,7 +132,7 @@ else { int len = Ustrlen(name); - /* Find the first non-deleted header witht the correct name. */ + /* Find the first non-deleted header with the correct name. */ for (hptr = &header_list; (h = *hptr) != NULL; hptr = &(h->next)) { @@ -206,7 +212,7 @@ Returns: nothing void header_add_at_position(BOOL after, uschar *name, BOOL topnot, int type, - char *format, ...) + const char *format, ...) { va_list ap; va_start(ap, format); @@ -231,7 +237,7 @@ Returns: nothing */ void -header_add(int type, char *format, ...) +header_add(int type, const char *format, ...) { va_list ap; va_start(ap, format); @@ -257,7 +263,7 @@ Returns: nothing */ void -header_remove(int occ, uschar *name) +header_remove(int occ, const uschar *name) { header_line *h; int hcount = 0; @@ -444,10 +450,11 @@ for (s = strings; s != NULL; s = s->next) va_start(ap, count); for (i = 0; i < count; i++) - { if (one_pattern_match(name, slen, has_addresses, va_arg(ap, uschar *))) + { + va_end(ap); return cond; - } + } va_end(ap); return !cond;