Dear Daniel, Kindly checkout this code modification in apt.diff file attached with font color green. After implementing new logic and handling outgoing qoutation marks with escape character, the mail system on shell is working fine. I believe that bug is fixed now and running efficiently on my system. Please acknowledge our effort.
Regards Qaiser Abbas
--- /tmp/apt-0.6.25/apt-pkg/contrib/configuration.cc 2004-05-08 18:10:10.000000000 -0400 +++ apt-pkg/contrib/configuration.cc 2008-05-12 13:32:31.000000000 -0400 @@ -397,6 +397,26 @@ return Exists(Name); } + +static string escape(const string &input) +{ + string::size_type start=0,end=input.find_first_of("\\\""); + string rval; + + while(end!=string::npos) + { + rval += string(input, start, end-start); + rval += '\\'; + finalstr += intput[end]; + + begin = end+1; + end=input.find_first_of("\\\"", start); + } + + finalstr += string(input, start); + + return rval; +} /*}}}*/ // Configuration::Dump - Dump the config /*{{{*/ // --------------------------------------------------------------------- @@ -408,7 +428,7 @@ const Configuration::Item *Top = Tree(0); for (; Top != 0;) { - str << Top->FullTag() << " \"" << Top->Value << "\";" << endl; - str << Top->FullTag() << " \"" << escape(Top->Value) << "\";" << endl; + str << Top->FullTag() << " \\\"" << escape(Top->Value) << "\\\";" << endl; //or the below one + str << Top->FullTag() << escape(Top->Value) <<";" << endl; if (Top->Child != 0) { @@ -491,8 +511,21 @@ // Discard single line comments bool InQuote = false; + bool BackslashEscape = false; for (char *I = Buffer; *I != 0; I++) { + if(BackslashEscape == true) + { + BackslashEscape=false; + continue; + } + + if (*I == '\\') + { + BackslashEscape = true; + continue; + } + if (*I == '"') InQuote = !InQuote; if (InQuote == true) @@ -507,8 +540,21 @@ // Look for multi line comments InQuote = false; + BackslashEscape = false; for (char *I = Buffer; *I != 0; I++) { + if (BackslashEscape == true) + { + BackslashEscape = false; + continue; + } + + if (*I == '\\') + { + BackslashEscape = true; + continue; + } + if (*I == '"') InQuote = !InQuote; if (InQuote == true) @@ -541,8 +587,24 @@ // We now have a valid line fragment InQuote = false; + BackslashEscape = false; for (char *I = Buffer; *I != 0;) { + if(BackslashEscape == true) + { + // Put this character into the buffer unconditionally + BackslashEscape=false; + ++I; + continue; + } + + if(*I == '\\') + { + BackslashEscape = true; + ++I; + continue; + } + if (*I == '"') InQuote = !InQuote; --- /tmp/apt-0.6.25/apt-pkg/contrib/strutl.cc 2003-07-18 10:15:11.000000000 -0400 +++ apt-pkg/contrib/strutl.cc 2004-07-20 13:33:24.000000000 -0400 @@ -100,6 +100,8 @@ understand [] brackets.*/ bool ParseQuoteWord(const char *&String,string &Res) { + cout << String << endl; + // Skip leading whitespace const char *C = String; for (;*C != 0 && *C == ' '; C++); @@ -176,7 +178,12 @@ if (*C == '"') { for (C++; *C != 0 && *C != '"'; C++) + { + if(*C=='\\' && *(C+1)!=0) + ++C; + *Buf++ = *C; + } if (*C == 0) return false;