summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2015-06-26 11:30:19 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2015-06-29 15:08:17 +0000
commite63f2f213ae1ab79b051ccf355c58ed6a305de55 (patch)
tree9fbe70eb09e0737f192fc9270f42548ba4a971ff
parentdbccb6181293730bc76c2f3b2590e584ef876f6d (diff)
downloadqtserialport-e63f2f213ae1ab79b051ccf355c58ed6a305de55.tar.gz
Fix crash in QSPI::availablePorts() on OS X 10.10
CFTypeRef returned by IORegistryEntrySearchCFProperty sometimes may be of unexpected type (as CFStringRef instead of CFNumberRef). In this case the CFNumberGetValue() throws the exception. The simplest fix is to check the type in searchShortIntProperty() before calling CFNumberGetValue(): CFGetTypeID(result.as<CFNumberRef>()) == CFNumberGetTypeID(). Thanks to Orest Hera. (cherry-picked from a7a4fa4b628526a5d9138ed56bb195be71bac118) Task-number: QTBUG-46875 Change-Id: Id86993c008595f9762a08739bf4c5f5662643e92 Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r--src/serialport/qserialportinfo_mac.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/serialport/qserialportinfo_mac.cpp b/src/serialport/qserialportinfo_mac.cpp
index b20264b..3f242f1 100644
--- a/src/serialport/qserialportinfo_mac.cpp
+++ b/src/serialport/qserialportinfo_mac.cpp
@@ -80,9 +80,10 @@ static quint16 searchShortIntProperty(io_registry_entry_t ioRegistryEntry,
bool &ok)
{
const QCFType<CFTypeRef> result(searchProperty(ioRegistryEntry, propertyKey));
+ const CFNumberRef ref = result.as<CFNumberRef>();
quint16 value = 0;
- ok = result.as<CFNumberRef>()
- && (::CFNumberGetValue(result.as<CFNumberRef>(), kCFNumberShortType, &value) > 0);
+ ok = ref && (::CFGetTypeID(ref) == ::CFNumberGetTypeID())
+ && (::CFNumberGetValue(ref, kCFNumberShortType, &value) > 0);
return value;
}