Permit leading space at start of RFC 2822 Date format
Relevant RFCs explicitly permit such space. Change-Id: I8eb444e96287368cbbf973c77513b43d1d36f972 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
6566157df3
commit
0debb205b2
|
|
@ -165,7 +165,7 @@ static ParsedRfcDateTime rfcDateImpl(const QString &s)
|
|||
ParsedRfcDateTime result;
|
||||
|
||||
// Matches "[ddd,] dd MMM yyyy[ hh:mm[:ss]] [±hhmm]" - correct RFC 822, 2822, 5322 format
|
||||
QRegExp rex(QStringLiteral("^(?:[A-Z][a-z]+,)?[ \\t]*(\\d{1,2})[ \\t]+([A-Z][a-z]+)[ \\t]+(\\d\\d\\d\\d)(?:[ \\t]+(\\d\\d):(\\d\\d)(?::(\\d\\d))?)?[ \\t]*(?:([+-])(\\d\\d)(\\d\\d))?"));
|
||||
QRegExp rex(QStringLiteral("^[ \\t]*(?:[A-Z][a-z]+,)?[ \\t]*(\\d{1,2})[ \\t]+([A-Z][a-z]+)[ \\t]+(\\d\\d\\d\\d)(?:[ \\t]+(\\d\\d):(\\d\\d)(?::(\\d\\d))?)?[ \\t]*(?:([+-])(\\d\\d)(\\d\\d))?"));
|
||||
if (s.indexOf(rex) == 0) {
|
||||
const QStringList cap = rex.capturedTexts();
|
||||
result.date = QDate(cap[3].toInt(), qt_monthNumberFromShortName(cap[2]), cap[1].toInt());
|
||||
|
|
@ -177,7 +177,7 @@ static ParsedRfcDateTime rfcDateImpl(const QString &s)
|
|||
result.utcOffset = ((hourOffset * 60 + minOffset) * (positiveOffset ? 60 : -60));
|
||||
} else {
|
||||
// Matches "ddd MMM dd[ hh:mm:ss] yyyy [±hhmm]" - permissive RFC 850, 1036 (read only)
|
||||
QRegExp rex(QStringLiteral("^[A-Z][a-z]+[ \\t]+([A-Z][a-z]+)[ \\t]+(\\d\\d)(?:[ \\t]+(\\d\\d):(\\d\\d):(\\d\\d))?[ \\t]+(\\d\\d\\d\\d)[ \\t]*(?:([+-])(\\d\\d)(\\d\\d))?"));
|
||||
QRegExp rex(QStringLiteral("^[ \\t]*[A-Z][a-z]+[ \\t]+([A-Z][a-z]+)[ \\t]+(\\d\\d)(?:[ \\t]+(\\d\\d):(\\d\\d):(\\d\\d))?[ \\t]+(\\d\\d\\d\\d)[ \\t]*(?:([+-])(\\d\\d)(\\d\\d))?"));
|
||||
if (s.indexOf(rex) == 0) {
|
||||
const QStringList cap = rex.capturedTexts();
|
||||
result.date = QDate(cap[6].toInt(), qt_monthNumberFromShortName(cap[1]), cap[2].toInt());
|
||||
|
|
|
|||
|
|
@ -1136,8 +1136,14 @@ void tst_QDate::fromStringDateFormat_data()
|
|||
// Test Qt::RFC2822Date format (RFC 2822).
|
||||
QTest::newRow("RFC 2822") << QString::fromLatin1("13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QDate(1987, 2, 13);
|
||||
QTest::newRow("RFC 2822 after space")
|
||||
<< QString::fromLatin1(" 13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QDate(1987, 2, 13);
|
||||
QTest::newRow("RFC 2822 with day") << QString::fromLatin1("Thu, 01 Jan 1970 00:12:34 +0000")
|
||||
<< Qt::RFC2822Date << QDate(1970, 1, 1);
|
||||
QTest::newRow("RFC 2822 with day after space")
|
||||
<< QString::fromLatin1(" Thu, 01 Jan 1970 00:12:34 +0000")
|
||||
<< Qt::RFC2822Date << QDate(1970, 1, 1);
|
||||
// No timezone
|
||||
QTest::newRow("RFC 2822 no timezone") << QString::fromLatin1("01 Jan 1970 00:12:34")
|
||||
<< Qt::RFC2822Date << QDate(1970, 1, 1);
|
||||
|
|
@ -1168,6 +1174,9 @@ void tst_QDate::fromStringDateFormat_data()
|
|||
// Test Qt::RFC2822Date format (RFC 850 and 1036, permissive).
|
||||
QTest::newRow("RFC 850 and 1036") << QString::fromLatin1("Fri Feb 13 13:24:51 1987 +0100")
|
||||
<< Qt::RFC2822Date << QDate(1987, 2, 13);
|
||||
QTest::newRow("RFC 850 and 1036 after space")
|
||||
<< QString::fromLatin1(" Fri Feb 13 13:24:51 1987 +0100")
|
||||
<< Qt::RFC2822Date << QDate(1987, 2, 13);
|
||||
// No timezone
|
||||
QTest::newRow("RFC 850 and 1036 no timezone") << QString::fromLatin1("Thu Jan 01 00:12:34 1970")
|
||||
<< Qt::RFC2822Date << QDate(1970, 1, 1);
|
||||
|
|
|
|||
|
|
@ -2310,8 +2310,14 @@ void tst_QDateTime::fromStringDateFormat_data()
|
|||
// Test Qt::RFC2822Date format (RFC 2822).
|
||||
QTest::newRow("RFC 2822 +0100") << QString::fromLatin1("13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 2822 after space +0100")
|
||||
<< QString::fromLatin1(" 13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 2822 with day +0100") << QString::fromLatin1("Fri, 13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 2822 with day after space +0100")
|
||||
<< QString::fromLatin1(" Fri, 13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 2822 -0100") << QString::fromLatin1("13 Feb 1987 13:24:51 -0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 2822 with day -0100") << QString::fromLatin1("Fri, 13 Feb 1987 13:24:51 -0100")
|
||||
|
|
@ -2324,6 +2330,11 @@ void tst_QDateTime::fromStringDateFormat_data()
|
|||
<< Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
|
||||
QTest::newRow("RFC 2822 with day +0000") << QString::fromLatin1("Thu, 01 Jan 1970 00:12:34 +0000")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
|
||||
// Should be invalid, but current implementation would just ignore the
|
||||
// offset as trailing junk if we insist on the space:
|
||||
QTest::newRow("RFC 2822 missing space before +0100")
|
||||
<< QString::fromLatin1("Thu, 01 Jan 1970 00:12:34+0100") << Qt::RFC2822Date
|
||||
<< QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::OffsetFromUTC, 3600);
|
||||
// No timezone assume UTC
|
||||
QTest::newRow("RFC 2822 no timezone") << QString::fromLatin1("01 Jan 1970 00:12:34")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
|
||||
|
|
@ -2354,6 +2365,9 @@ void tst_QDateTime::fromStringDateFormat_data()
|
|||
// Test Qt::RFC2822Date format (RFC 850 and 1036, permissive).
|
||||
QTest::newRow("RFC 850 and 1036 +0100") << QString::fromLatin1("Fri Feb 13 13:24:51 1987 +0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 1036 after space +0100")
|
||||
<< QString::fromLatin1(" Fri Feb 13 13:24:51 1987 +0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 850 and 1036 -0100") << QString::fromLatin1("Fri Feb 13 13:24:51 1987 -0100")
|
||||
<< Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), Qt::UTC);
|
||||
QTest::newRow("RFC 850 and 1036 +0000") << QString::fromLatin1("Thu Jan 01 00:12:34 1970 +0000")
|
||||
|
|
|
|||
|
|
@ -619,8 +619,14 @@ void tst_QTime::fromStringDateFormat_data()
|
|||
// Test Qt::RFC2822Date format (RFC 2822).
|
||||
QTest::newRow("RFC 2822") << QString::fromLatin1("13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QTime(13, 24, 51);
|
||||
QTest::newRow("RFC 2822 after space")
|
||||
<< QString::fromLatin1(" 13 Feb 1987 13:24:51 +0100")
|
||||
<< Qt::RFC2822Date << QTime(13, 24, 51);
|
||||
QTest::newRow("RFC 2822 with day") << QString::fromLatin1("Thu, 01 Jan 1970 00:12:34 +0000")
|
||||
<< Qt::RFC2822Date << QTime(0, 12, 34);
|
||||
QTest::newRow("RFC 2822 with day after space")
|
||||
<< QString::fromLatin1(" Thu, 01 Jan 1970 00:12:34 +0000")
|
||||
<< Qt::RFC2822Date << QTime(0, 12, 34);
|
||||
// No timezone
|
||||
QTest::newRow("RFC 2822 no timezone") << QString::fromLatin1("01 Jan 1970 00:12:34")
|
||||
<< Qt::RFC2822Date << QTime(0, 12, 34);
|
||||
|
|
@ -651,6 +657,9 @@ void tst_QTime::fromStringDateFormat_data()
|
|||
// Test Qt::RFC2822Date format (RFC 850 and 1036, permissive).
|
||||
QTest::newRow("RFC 850 and 1036") << QString::fromLatin1("Fri Feb 13 13:24:51 1987 +0100")
|
||||
<< Qt::RFC2822Date << QTime(13, 24, 51);
|
||||
QTest::newRow("RFC 850 and 1036 after space")
|
||||
<< QString::fromLatin1(" Fri Feb 13 13:24:51 1987 +0100")
|
||||
<< Qt::RFC2822Date << QTime(13, 24, 51);
|
||||
// No timezone
|
||||
QTest::newRow("RFC 850 and 1036 no timezone") << QString::fromLatin1("Thu Jan 01 00:12:34 1970")
|
||||
<< Qt::RFC2822Date << QTime(0, 12, 34);
|
||||
|
|
|
|||
Loading…
Reference in New Issue