[PATCH] kdecore: Fix a bug in KDateTime utc offset string parsing.
Jon Severinsson
jon at severinsson.net
Sun Oct 7 21:23:56 BST 2012
The sign of the UTC offset was ignored, and an offset of -0500 (New York) would be treated at +0500 (Pakistan).
This commit also adds a unit test for UTC offset parsing and comparasion.
---
Hi
When mucking around in the frameworks branch of kdelibs I found a bug in the
KDateTime string parsing, which appears to be present in master as well as
every branch from 4.0 to 4.10. I have, however, only run the updated unittest
using the frameworks branch and Qt5, so someone else should probably test
on 4.9, 4.10 and/or master before committing it.
Best Regards
Jon Severinsson
kdecore/date/kdatetime.cpp | 2 +-
kdecore/tests/kdatetimetest.cpp | 7 +++++++
2 filer ändrade, 8 tillägg(+), 1 borttagning(-)
diff --git a/kdecore/date/kdatetime.cpp b/kdecore/date/kdatetime.cpp
index d4f63ff..df1fc3d 100644
--- a/kdecore/date/kdatetime.cpp
+++ b/kdecore/date/kdatetime.cpp
@@ -2962,7 +2962,7 @@ bool getUTCOffset(const QString &string, int &offset, bool colon, int &result)
tzmin += tzhour * 60;
if (result != NO_NUMBER && result != tzmin)
return false;
- result = tzmin;
+ result = sign * tzmin;
return true;
}
diff --git a/kdecore/tests/kdatetimetest.cpp b/kdecore/tests/kdatetimetest.cpp
index e79e9f2..812abc5 100644
--- a/kdecore/tests/kdatetimetest.cpp
+++ b/kdecore/tests/kdatetimetest.cpp
@@ -3807,6 +3807,13 @@ void KDateTimeTest::strings_format()
QVERIFY(!dt.isValid()); // too early
QVERIFY(dt.outOfRange());
+ dtutc = KDateTime::fromString(QLatin1String("2000-01-01T00:00:00.000+0000"), QLatin1String("%Y-%m-%dT%H:%M%:S%:s%z"));
+ QVERIFY(dtutc.isValid());
+ dt = KDateTime::fromString(QLatin1String("2000-01-01T05:00:00.000+0500"), QLatin1String("%Y-%m-%dT%H:%M%:S%:s%z"));
+ QVERIFY(dt.isValid());
+ QVERIFY(dtutc == dt);
+ dt = KDateTime::fromString(QLatin1String("1999-12-31T20:30:00.000-0330"), QLatin1String("%Y-%m-%dT%H:%M%:S%:s%z"));
+ QVERIFY(dtutc == dt);
// Restore the original local time zone
if (originalZone.isEmpty())
--
1.7.10.4
More information about the kde-core-devel
mailing list