From bd94a46f619395032ef48b2a53db294488738532 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 22 Oct 2014 12:03:33 +0200 Subject: QSettings: Fix handling of long long ints with CFPreferences back-end. The CFNumberGetValue() function does not work as advertised: For some (but not all) CFNumbers containing a long long value outside the range of int, it returns true when asked to convert to an int, so the wrong value is extracted from the CFNumber. As a workaround, use CFNumberGetType() to find out whether the value is actually an int. Task-number: QTBUG-42017 Change-Id: Ib95395491d0db61d2bdc0f058a6a2f6be05da432 Reviewed-by: Thiago Macieira Reviewed-by: Eike Ziller --- src/corelib/io/qsettings_mac.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/corelib/io') diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp index 4752077f87..344bec0309 100644 --- a/src/corelib/io/qsettings_mac.cpp +++ b/src/corelib/io/qsettings_mac.cpp @@ -235,8 +235,10 @@ static QVariant qtValue(CFPropertyListRef cfvalue) int i; qint64 ll; - if (CFNumberGetValue(cfnumber, kCFNumberIntType, &i)) + if (CFNumberGetType(cfnumber) == kCFNumberIntType) { + CFNumberGetValue(cfnumber, kCFNumberIntType, &i); return i; + } CFNumberGetValue(cfnumber, kCFNumberLongLongType, &ll); return ll; } -- cgit v1.2.3