[haiku-commits] haiku: hrev54963 - src/apps/processcontroller

  • From: Jérôme Duval <jerome.duval@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 24 Feb 2021 05:52:08 +0000 (UTC)

hrev54963 adds 1 changeset to branch 'master'
old head: c1e6e51a05d569622330492ffcaa50494d31737c
new head: e5b7c9e313bfff75b75d69cf506a8898fc44f286
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=e5b7c9e313bf+%5Ec1e6e51a05d5

----------------------------------------------------------------------------

e5b7c9e313bf: processcontroller: Fix memory leak
  
  When getting icon is failed, get_team_name_and_icon()
  does not return false, so bitmap allocated to
  infoPack.team_icon can be leaked.
  
  * Delete bitmap in get_team_name_and_icon(), not in caller.
  * Return false when getiing icon is failed.
  
  Change-Id: Ib65065b59b70cd839e6deda4e1142bd104072d84
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/3744
  Reviewed-by: Jérôme Duval <jerome.duval@xxxxxxxxx>

                                      [ Murai Takashi <tmurai01@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev54963
Commit:      e5b7c9e313bfff75b75d69cf506a8898fc44f286
URL:         https://git.haiku-os.org/haiku/commit/?id=e5b7c9e313bf
Author:      Murai Takashi <tmurai01@xxxxxxxxx>
Date:        Tue Feb 16 10:40:06 2021 UTC
Committer:   Jérôme Duval <jerome.duval@xxxxxxxxx>
Commit-Date: Wed Feb 24 05:52:05 2021 UTC

----------------------------------------------------------------------------

4 files changed, 8 insertions(+), 3 deletions(-)
src/apps/processcontroller/MemoryBarMenu.cpp | 1 -
src/apps/processcontroller/QuitMenu.cpp      | 3 ++-
src/apps/processcontroller/TeamBarMenu.cpp   | 1 -
src/apps/processcontroller/Utilities.cpp     | 6 ++++++

----------------------------------------------------------------------------

diff --git a/src/apps/processcontroller/MemoryBarMenu.cpp 
b/src/apps/processcontroller/MemoryBarMenu.cpp
index 52c561fea9..0aa5b4f146 100644
--- a/src/apps/processcontroller/MemoryBarMenu.cpp
+++ b/src/apps/processcontroller/MemoryBarMenu.cpp
@@ -134,7 +134,6 @@ MemoryBarMenu::Pulse()
                        fTeamList[j] = infos.team_info.team;
                        if (!get_team_name_and_icon(infos, true)) {
                                // the team is already gone!
-                               delete infos.team_icon;
                                fTeamList[j] = -1;
                        } else {
                                if (!item && firstRecycle < lastRecycle)
diff --git a/src/apps/processcontroller/QuitMenu.cpp 
b/src/apps/processcontroller/QuitMenu.cpp
index ee4192dc98..369bbab0db 100644
--- a/src/apps/processcontroller/QuitMenu.cpp
+++ b/src/apps/processcontroller/QuitMenu.cpp
@@ -106,9 +106,10 @@ QuitMenu::AddTeam(team_id tmid)
        else {
                info_pack infos;
                if (get_team_info(tmid, &infos.team_info) == B_OK
-                       && get_team_name_and_icon(infos, true))
+                       && get_team_name_and_icon(infos, true)) {
                        item = new QuitMenuItem(tmid, infos.team_icon, 
infos.team_name,
                                message, true);
+               }
        }
        if (item) {
                item->SetTarget(gPCView);
diff --git a/src/apps/processcontroller/TeamBarMenu.cpp 
b/src/apps/processcontroller/TeamBarMenu.cpp
index f65ef1926e..aecfe36871 100644
--- a/src/apps/processcontroller/TeamBarMenu.cpp
+++ b/src/apps/processcontroller/TeamBarMenu.cpp
@@ -117,7 +117,6 @@ TeamBarMenu::Pulse()
                        fTeamList[j] = infos.team_info.team;
                        if (!get_team_name_and_icon(infos, true)) {
                                // the team is already gone!
-                               delete infos.team_icon;
                                fTeamList[j] = -1;
                        } else {
                                if (!item && firstRecycle < lastRecycle) {
diff --git a/src/apps/processcontroller/Utilities.cpp 
b/src/apps/processcontroller/Utilities.cpp
index 60fef30179..470247b3b3 100644
--- a/src/apps/processcontroller/Utilities.cpp
+++ b/src/apps/processcontroller/Utilities.cpp
@@ -67,6 +67,12 @@ get_team_name_and_icon(info_pack& infoPack, bool icon)
                                B_MINI_ICON) != B_OK) {
                        BMimeType genericAppType(B_APP_MIME_TYPE);
                        status = genericAppType.GetIcon(infoPack.team_icon, 
B_MINI_ICON);
+                       // failed to get icon
+                       if (status != B_OK) {
+                               delete infoPack.team_icon;
+                               infoPack.team_icon = NULL;
+                               return false;
+                       }
                }
        } else
                infoPack.team_icon = NULL;


Other related posts:

  • » [haiku-commits] haiku: hrev54963 - src/apps/processcontroller - Jérôme Duval