[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    =?UTF-8?q?=5BPATCH=5D=20kdecore=3A=20Fix=20a=20bug=20in=20KDateTime=20utc=20offset=20string=20parsin
From:       Jon Severinsson <jon () severinsson ! net>
Date:       2012-10-07 20:23:56
Message-ID: 1349641436-2134-1-git-send-email-jon () severinsson ! net
[Download RAW message or body]

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic