From: Ben Schmidt Date: Fri, 20 Apr 2012 00:41:58 +0000 (+1000) Subject: Fix and improve how tokens are recognised for conditionals etc.. X-Git-Tag: RELEASE_1_2_18rc1~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56c1bb6274e8339141c13f2b2cfe7ac8fc9823b4;p=thirdparty%2Fmlmmj.git Fix and improve how tokens are recognised for conditionals etc.. --- diff --git a/README.listtexts b/README.listtexts index ac7dbabf..cb0a38e4 100644 --- a/README.listtexts +++ b/README.listtexts @@ -341,13 +341,13 @@ appropriate for use in headers. They are: - %text T% text from the file named T in the listdir/text directory; the name may only - include letters, digits, underscore, dot and hyphen; note that there is an - unformatted version of this directive + include letters, digits, underscore, dot and hyphen, and may not start with a + dot; note that there is an unformatted version of this directive - %control C% the contents of the control file named C in listir/control; the name may only - include letters, digits, underscore, dot and hyphen; note that there is an - unformatted version of this directive + include letters, digits, underscore, dot and hyphen, and may not start with a + dot; note that there is an unformatted version of this directive - %originalmail% - %originalmail N% @@ -418,7 +418,8 @@ Unformatted substitutions that are available are: - $control C$ the contents of the control file named C in listdir/control, with its final newline stripped; the name may only include letters, digits, underscore, dot - and hyphen; note that there is a formatted version of this directive + and hyphen, and may not start with a dot; note that there is a formatted + version of this directive - $digestfirst$ (available only in digest) @@ -562,7 +563,8 @@ Unformatted substitutions that are available are: - $text T$ text from the file named T in the listdir/text directory, with its final newline stripped; the name may only include letters, digits, underscore, dot - and hyphen; note that there is a formatted version of this directive + and hyphen, and may not start with a dot; note that there is a formatted + version of this directive Escapes ------- diff --git a/src/prepstdreply.c b/src/prepstdreply.c index bd47c5b8..1f46e3b7 100644 --- a/src/prepstdreply.c +++ b/src/prepstdreply.c @@ -298,14 +298,14 @@ void finish_file_lines(file_lines_state *s) static char *filename_token(char *token) { - char *pos; - if (*token == '\0') return NULL; - pos = token; + char *pos = token; + if (*pos == '\0') return NULL; while ( (*pos >= '0' && *pos <= '9') || (*pos >= 'A' && *pos <= 'Z') || (*pos >= 'a' && *pos <= 'z') || - (*pos == '_') || (*pos == '-') || (*pos == '.') + (*pos == '_') || (*pos == '-') || + (*pos == '.' && pos != token) ) { pos++; } @@ -736,18 +736,17 @@ static int handle_conditional(text *txt, char **line_p, char **pos_p, conditional *cond; if (txt->skip == NULL) { - pos = token; for (;;) { - if (*token == '\0') break; - for (; *pos != '\0' && (!multi || *pos != ' '); - pos++) { - if(*pos >= '0' && *pos <= '9') continue; - if(*pos >= 'A' && *pos <= 'Z') continue; - if(*pos >= 'a' && *pos <= 'z') continue; - if(*pos == '_') continue; - if(*pos == '-') continue; - if(*pos == '.') continue; - break; + pos = token; + if (*pos == '\0') break; + while ( + (*pos >= '0' && *pos <= '9') || + (*pos >= 'A' && *pos <= 'Z') || + (*pos >= 'a' && *pos <= 'z') || + (*pos == '_') || (*pos == '-') || + (*pos == '.' && pos != token) + ) { + pos++; } if (*pos == ' ') { *pos = '\0'; @@ -780,7 +779,7 @@ static int handle_conditional(text *txt, char **line_p, char **pos_p, if (!multi) break; *pos = ' '; - pos++; + token = pos + 1; } } else { /* We consider nested conditionals as successful while skipping