1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Dominik Riebeling 2010-10-05 19:53:48 +00:00
parent 85f1df1b1a
commit 90e8815673

View file

@ -509,17 +509,22 @@ QUrl System::systemProxy(void)
CFDictionaryRef dictref; CFDictionaryRef dictref;
CFStringRef stringref; CFStringRef stringref;
CFNumberRef numberref; CFNumberRef numberref;
int enable; int enable = 0;
int port; int port = 0;
unsigned int bufsize = 0; unsigned int bufsize = 0;
char *buf; char *buf;
QUrl proxy; QUrl proxy;
dictref = SCDynamicStoreCopyProxies(NULL); dictref = SCDynamicStoreCopyProxies(NULL);
stringref = (CFStringRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPProxy); if(dictref == NULL)
return proxy;
numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPEnable); numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPEnable);
if(numberref != NULL)
CFNumberGetValue(numberref, kCFNumberIntType, &enable); CFNumberGetValue(numberref, kCFNumberIntType, &enable);
if(enable == 1) { if(enable == 1) {
// get proxy string
stringref = (CFStringRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPProxy);
if(stringref != NULL) {
// get number of characters. CFStringGetLength uses UTF-16 code pairs // get number of characters. CFStringGetLength uses UTF-16 code pairs
bufsize = CFStringGetLength(stringref) * 2 + 1; bufsize = CFStringGetLength(stringref) * 2 + 1;
buf = (char*)malloc(sizeof(char) * bufsize); buf = (char*)malloc(sizeof(char) * bufsize);
@ -530,6 +535,7 @@ QUrl System::systemProxy(void)
} }
CFStringGetCString(stringref, buf, bufsize, kCFStringEncodingUTF16); CFStringGetCString(stringref, buf, bufsize, kCFStringEncodingUTF16);
numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPPort); numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPPort);
if(numberref != NULL)
CFNumberGetValue(numberref, kCFNumberIntType, &port); CFNumberGetValue(numberref, kCFNumberIntType, &port);
proxy.setScheme("http"); proxy.setScheme("http");
proxy.setHost(QString::fromUtf16((unsigned short*)buf)); proxy.setHost(QString::fromUtf16((unsigned short*)buf));
@ -537,6 +543,7 @@ QUrl System::systemProxy(void)
free(buf); free(buf);
} }
}
CFRelease(dictref); CFRelease(dictref);
return proxy; return proxy;