IMAP parsing workarounds for Yandex.
This commit is contained in:
parent
a15d2d2044
commit
5f63d47401
@ -975,6 +975,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
const string& value() const { return (m_value); }
|
const string& value() const { return (m_value); }
|
||||||
|
void setValue(const string& val) { m_value = val; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -2940,7 +2941,23 @@ public:
|
|||||||
|
|
||||||
size_t pos = *currentPos;
|
size_t pos = *currentPos;
|
||||||
|
|
||||||
m_string1 = parser.get <xstring>(line, &pos);
|
if (!parser.isStrict())
|
||||||
|
{
|
||||||
|
// Some servers send an <atom> instead of a <string> here:
|
||||||
|
// eg. ... (CHARSET "X-UNKNOWN") ...
|
||||||
|
if (!(m_string1 = parser.get <xstring>(line, &pos, true)))
|
||||||
|
{
|
||||||
|
std::auto_ptr <atom> at(parser.get <atom>(line, &pos));
|
||||||
|
|
||||||
|
m_string1 = new xstring();
|
||||||
|
m_string1->setValue(at->value());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_string1 = parser.get <xstring>(line, &pos);
|
||||||
|
}
|
||||||
|
|
||||||
parser.check <SPACE>(line, &pos);
|
parser.check <SPACE>(line, &pos);
|
||||||
m_string2 = parser.get <xstring>(line, &pos);
|
m_string2 = parser.get <xstring>(line, &pos);
|
||||||
|
|
||||||
@ -4453,9 +4470,21 @@ public:
|
|||||||
size_t pos = *currentPos;
|
size_t pos = *currentPos;
|
||||||
|
|
||||||
parser.check <one_char <'+'> >(line, &pos);
|
parser.check <one_char <'+'> >(line, &pos);
|
||||||
parser.check <SPACE>(line, &pos);
|
|
||||||
|
|
||||||
m_resp_text = parser.get <IMAPParser::resp_text>(line, &pos);
|
if (!parser.isStrict())
|
||||||
|
{
|
||||||
|
// Some servers do not send SPACE when response text is empty
|
||||||
|
if (parser.check <SPACE>(line, &pos, true))
|
||||||
|
m_resp_text = parser.get <IMAPParser::resp_text>(line, &pos);
|
||||||
|
else
|
||||||
|
m_resp_text = new IMAPParser::resp_text(); // empty
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parser.check <SPACE>(line, &pos);
|
||||||
|
|
||||||
|
m_resp_text = parser.get <IMAPParser::resp_text>(line, &pos);
|
||||||
|
}
|
||||||
|
|
||||||
parser.check <CRLF>(line, &pos);
|
parser.check <CRLF>(line, &pos);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user