=== modified file 'src/ConfigParser.cc' --- src/ConfigParser.cc 2013-07-22 01:26:09 +0000 +++ src/ConfigParser.cc 2013-07-29 16:50:58 +0000 @@ -280,7 +280,8 @@ if (!token) token = NextElement(LastTokenType); - if (token && LastTokenType == ConfigParser::FunctionNameToken && strcmp("parameters", token) == 0) { + if (token && LastTokenType == ConfigParser::FunctionNameToken) { + if (strcmp("parameters", token) == 0) { char *path = NextToken(); if (LastTokenType != ConfigParser::QuotedToken) { debugs(3, DBG_CRITICAL, "Quoted filename missing: " << token); @@ -311,11 +312,19 @@ } CfgFiles.push(wordfile); token = NULL; - } else if (token && LastTokenType == ConfigParser::FunctionNameToken) { - debugs(3, DBG_CRITICAL, "Unknown cfg function: " << token); - self_destruct(); - return NULL; + } else { + debugs(3, 3, "Unknown cfg function: " << token); + + // we have determined tha the whole of this token is not a built-in function() style token + // ignore any further '(' as well + // concatenate this token, the '('-delimiter which confused things and next token. + // send to the undo queue for better processing next time around + LOCAL_ARRAY(char, tbuf, CONFIG_LINE_LIMIT); + const char *temp = NextElement(LastTokenType, false); + snprintf(tbuf, sizeof(tbuf)-1, "%s(%s", token, temp); + return (LastToken = tbuf); } + } } while (token == NULL && !CfgFiles.empty()); return (LastToken = token);