From d3233254c882e1e815750bb0fc78bb9226b2c5a7 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 9 Oct 2017 12:28:22 +0200 Subject: [PATCH 1/2] upnpbrowser : fix memleak --- src/gui/upnpbrowser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 2d33021c7..0b3c753c9 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -643,6 +643,7 @@ void CUpnpBrowserGui::playnext(void) timeout = time(NULL) + g_settings.picviewer_slide_time; showPicture((*entries)[0].resources[preferred].url); } + delete entries; return; } } else { From 6d81594f1200c332ffa092505fba346de0ba0631 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 9 Oct 2017 16:36:49 +0200 Subject: [PATCH 2/2] upnpbrowser : fix memleaks --- src/gui/upnpbrowser.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 0b3c753c9..127769933 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -295,15 +295,13 @@ bool CUpnpBrowserGui::getResults(std::string id, unsigned int start, unsigned in std::vector *CUpnpBrowserGui::decodeResult(std::string result) { xmlNodePtr root, node, snode; - std::vector *entries; - xmlDocPtr parser = parseXml(result.c_str(),"UTF-8"); root = xmlDocGetRootElement(parser); if (!root) { xmlFreeDoc(parser); return NULL; } - entries = new std::vector; + std::vector *entries = new std::vector; for (node=xmlChildrenNode(root); node; node=xmlNextNode(node)) { @@ -644,9 +642,17 @@ void CUpnpBrowserGui::playnext(void) showPicture((*entries)[0].resources[preferred].url); } delete entries; + entries = NULL; return; + }else{ + delete entries; + entries = NULL; } } else { + if(entries){ + delete entries; + entries = NULL; + } neutrino_msg_t msg; neutrino_msg_data_t data; g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display @@ -658,7 +664,10 @@ void CUpnpBrowserGui::playnext(void) } } } - delete entries; + if(entries){ + delete entries; + entries = NULL; + } m_frameBuffer->Clear(); } @@ -690,9 +699,13 @@ bool CUpnpBrowserGui::getItems(std::string id, unsigned int index, std::vectorsize() || returned == 0) + if (!entries || !nfound || !tfound || !rfound || returned != entries->size() || returned == 0){ + if(entries){ + delete entries; + entries = NULL; + } return false; - + } return true; } @@ -923,6 +936,7 @@ bool CUpnpBrowserGui::selectItem(std::string id) #endif delete entries; + entries = NULL; timeout = 0; return endall;