diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2010-10-05 19:53:48 +0000 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2010-10-05 19:53:48 +0000 |
commit | 90e8815673bc949c3ef1dbf8904b50c8dfd023f6 (patch) | |
tree | 0253564aa31322f682b2ccd15f87a301ec0c4b76 /rbutil/rbutilqt/base/system.cpp | |
parent | 85f1df1b1ac4571ac81b505d10bce8ad4e19ec5b (diff) | |
download | rockbox-90e8815673bc949c3ef1dbf8904b50c8dfd023f6.tar.gz rockbox-90e8815673bc949c3ef1dbf8904b50c8dfd023f6.zip |
Fix crash on proxy detection on OS X (FS#11654).
If the proxy dialog doesn't contain any values searching for the values in the
system returns NULL pointers instead of empty values. Check for them to fix
crashes.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28212 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt/base/system.cpp')
-rw-r--r-- | rbutil/rbutilqt/base/system.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/rbutil/rbutilqt/base/system.cpp b/rbutil/rbutilqt/base/system.cpp index 3773e68786..4b97dea0f0 100644 --- a/rbutil/rbutilqt/base/system.cpp +++ b/rbutil/rbutilqt/base/system.cpp @@ -509,33 +509,40 @@ QUrl System::systemProxy(void) CFDictionaryRef dictref; CFStringRef stringref; CFNumberRef numberref; - int enable; - int port; + int enable = 0; + int port = 0; unsigned int bufsize = 0; char *buf; QUrl proxy; dictref = SCDynamicStoreCopyProxies(NULL); - stringref = (CFStringRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPProxy); + if(dictref == NULL) + return proxy; numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPEnable); - CFNumberGetValue(numberref, kCFNumberIntType, &enable); + if(numberref != NULL) + CFNumberGetValue(numberref, kCFNumberIntType, &enable); if(enable == 1) { - // get number of characters. CFStringGetLength uses UTF-16 code pairs - bufsize = CFStringGetLength(stringref) * 2 + 1; - buf = (char*)malloc(sizeof(char) * bufsize); - if(buf == NULL) { - qDebug() << "[System] can't allocate memory for proxy string!"; - CFRelease(dictref); - return QUrl(""); - } - CFStringGetCString(stringref, buf, bufsize, kCFStringEncodingUTF16); - numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPPort); - CFNumberGetValue(numberref, kCFNumberIntType, &port); - proxy.setScheme("http"); - proxy.setHost(QString::fromUtf16((unsigned short*)buf)); - proxy.setPort(port); - - free(buf); + // get proxy string + stringref = (CFStringRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPProxy); + if(stringref != NULL) { + // get number of characters. CFStringGetLength uses UTF-16 code pairs + bufsize = CFStringGetLength(stringref) * 2 + 1; + buf = (char*)malloc(sizeof(char) * bufsize); + if(buf == NULL) { + qDebug() << "[System] can't allocate memory for proxy string!"; + CFRelease(dictref); + return QUrl(""); + } + CFStringGetCString(stringref, buf, bufsize, kCFStringEncodingUTF16); + numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPPort); + if(numberref != NULL) + CFNumberGetValue(numberref, kCFNumberIntType, &port); + proxy.setScheme("http"); + proxy.setHost(QString::fromUtf16((unsigned short*)buf)); + proxy.setPort(port); + + free(buf); + } } CFRelease(dictref); |