X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fsieve.c;h=5d072f855aafa5e306cd9bfd40088bc8d1c69067;hb=ae20c80970d513823f3d36e73ec9657bf4b0e197;hp=262367ef220952e2135390515b0a0f16ba088587;hpb=55414b25bee9f0195ccd1e47f3d3b5cba766e099;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/sieve.c b/src/src/sieve.c index 262367ef2..5d072f855 100644 --- a/src/src/sieve.c +++ b/src/src/sieve.c @@ -2,8 +2,10 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) Michael Haardt 2003-2008 */ -/* See the file NOTICE for conditions of use and distribution. */ +/* Copyright (c) Michael Haardt 2003 - 2015 + * Copyright (c) The Exim Maintainers 2016 + * See the file NOTICE for conditions of use and distribution. + */ /* This code was contributed by Michael Haardt. */ @@ -232,6 +234,9 @@ uschar *new = NULL; uschar ch; size_t line; +/* Two passes: one to count output allocation size, second +to do the encoding */ + for (pass=0; pass<=1; ++pass) { line=0; @@ -245,54 +250,47 @@ for (pass=0; pass<=1; ++pass) for (start=src->character,end=start+src->length; start=73) + if (line>=73) /* line length limit */ { if (pass==0) dst->length+=2; else { - *new++='='; + *new++='='; /* line split */ *new++='\n'; } line=0; } - if - ( - (ch>=33 && ch<=60) - || (ch>=62 && ch<=126) - || - ( - (ch==9 || ch==32) - && start+2='!' && ch<='<') + || (ch>='>' && ch<='~') + || ( (ch=='\t' || ch==' ') + && start+2length; else - *new++=*start; + *new++=*start; /* copy char */ ++line; } - else if (ch=='\r' && start+1length; - line=0; - } else - *new++='\n'; - line=0; - ++start; + *new++='\n'; /* NL */ + line=0; + ++start; /* consume extra input char */ } else { if (pass==0) dst->length+=3; else - { - sprintf(CS new,"=%02X",ch); + { /* encoded char */ + new += sprintf(CS new,"=%02X",ch); new+=3; } line+=3; @@ -433,7 +431,7 @@ if (*uri && *uri!='?') if (uri>start) { capacity=0; - to.character=(uschar*)0; + to.character= NULL; to.length=0; to.character=string_cat(to.character,&capacity,&to.length,start,uri-start); to.character[to.length]='\0'; @@ -467,7 +465,7 @@ if (*uri=='?') if (uri>start) { capacity=0; - hname.character=(uschar*)0; + hname.character= NULL; hname.length=0; hname.character=string_cat(hname.character,&capacity,&hname.length,start,uri-start); hname.character[hname.length]='\0'; @@ -490,7 +488,7 @@ if (*uri=='?') if (uri>start) { capacity=0; - hvalue.character=(uschar*)0; + hvalue.character= NULL; hvalue.length=0; hvalue.character=string_cat(hvalue.character,&capacity,&hvalue.length,start,uri-start); hvalue.character[hvalue.length]='\0'; @@ -1072,7 +1070,7 @@ if (file) setflag(new_addr, af_pfr|af_file); new_addr->mode = 0; } -new_addr->p.errors_address = NULL; +new_addr->prop.errors_address = NULL; new_addr->next = *generated; *generated = new_addr; }