summaryrefslogtreecommitdiffstats
path: root/rbutil/rbutilqt/base/system.cpp
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2010-10-05 19:53:48 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2010-10-05 19:53:48 +0000
commit90e8815673bc949c3ef1dbf8904b50c8dfd023f6 (patch)
tree0253564aa31322f682b2ccd15f87a301ec0c4b76 /rbutil/rbutilqt/base/system.cpp
parent85f1df1b1ac4571ac81b505d10bce8ad4e19ec5b (diff)
downloadrockbox-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.cpp47
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);