From 8165696e0217ddad7438ea9341badaae2ca28158 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Mon, 27 Jan 2014 15:12:42 -0500 Subject: [PATCH] IconSaver: fix potential memory leak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit delete icon doesn’t do anything, delete[] data does. --- .../screen_savers/icons/IconsSaver.cpp | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/add-ons/screen_savers/icons/IconsSaver.cpp b/src/add-ons/screen_savers/icons/IconsSaver.cpp index 2e1cebc879..e52dc41028 100644 --- a/src/add-ons/screen_savers/icons/IconsSaver.cpp +++ b/src/add-ons/screen_savers/icons/IconsSaver.cpp @@ -197,16 +197,24 @@ IconsSaver::_GetVectorIcons() if (mimeType.InitCheck() != B_OK) continue; - vector_icon* icon = (vector_icon*)malloc(sizeof(vector_icon)); - if (icon == NULL) - continue; + uint8* data; + size_t size; - if (mimeType.GetIcon(&icon->data, &icon->size) != B_OK) { - // didn't find an icon, delete the icon container - delete icon; + if (mimeType.GetIcon(&data, &size) != B_OK) { + // didn't find an icon continue; } + vector_icon* icon = (vector_icon*)malloc(sizeof(vector_icon)); + if (icon == NULL) { + // ran out of memory, delete the icon data + delete[] data; + continue; + } + + icon->data = data; + icon->size = size; + // found a vector icon, add it to the list fVectorIcons.AddItem(icon); if (fVectorIcons.CountItems() >= kMaxIconCount) {