Fix memory leaks in qt/guiutil.cpp
on macOS: listSnapshot was leaking in findStartupItemInList() bitcoinAppUrl was leaking in [Get|Set]StartOnSystemStartup()
This commit is contained in:
parent
07c92b98e2
commit
9b348ff9eb
1 changed files with 30 additions and 11 deletions
|
@ -780,8 +780,12 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
|||
LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl);
|
||||
LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl)
|
||||
{
|
||||
// loop through the list of startup items and try to find the bitcoin app
|
||||
CFArrayRef listSnapshot = LSSharedFileListCopySnapshot(list, nullptr);
|
||||
if (listSnapshot == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// loop through the list of startup items and try to find the bitcoin app
|
||||
for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) {
|
||||
LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i);
|
||||
UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes;
|
||||
|
@ -798,29 +802,42 @@ LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef
|
|||
LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, nullptr);
|
||||
#endif
|
||||
|
||||
if(currentItemURL && CFEqual(currentItemURL, findUrl)) {
|
||||
if(currentItemURL) {
|
||||
if (CFEqual(currentItemURL, findUrl)) {
|
||||
// found
|
||||
CFRelease(listSnapshot);
|
||||
CFRelease(currentItemURL);
|
||||
return item;
|
||||
}
|
||||
if(currentItemURL) {
|
||||
CFRelease(currentItemURL);
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(listSnapshot);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool GetStartOnSystemStartup()
|
||||
{
|
||||
CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle());
|
||||
if (bitcoinAppUrl == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
LSSharedFileListRef loginItems = LSSharedFileListCreate(nullptr, kLSSharedFileListSessionLoginItems, nullptr);
|
||||
LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl);
|
||||
|
||||
CFRelease(bitcoinAppUrl);
|
||||
return !!foundItem; // return boolified object
|
||||
}
|
||||
|
||||
bool SetStartOnSystemStartup(bool fAutoStart)
|
||||
{
|
||||
CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle());
|
||||
if (bitcoinAppUrl == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
LSSharedFileListRef loginItems = LSSharedFileListCreate(nullptr, kLSSharedFileListSessionLoginItems, nullptr);
|
||||
LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl);
|
||||
|
||||
|
@ -832,6 +849,8 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
|||
// remove item
|
||||
LSSharedFileListItemRemove(loginItems, foundItem);
|
||||
}
|
||||
|
||||
CFRelease(bitcoinAppUrl);
|
||||
return true;
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
|
|
Loading…
Reference in a new issue