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 <thiago.macieira@intel.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This commit is contained in:
Christian Kandeler 2014-10-22 12:03:33 +02:00
parent c803af5167
commit bd94a46f61

View File

@ -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;
}