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) {