From f9cabdd00949d006252087a791c5d458fbfb5291 Mon Sep 17 00:00:00 2001 From: Alex Wilson Date: Wed, 18 Jan 2012 17:10:10 +1300 Subject: [PATCH] Use BReferenceable properties of LinearSpec in BALMLayout. This saves us from a potential use-afte-free bug. --- headers/libs/alm/ALMLayout.h | 1 - src/libs/alm/ALMLayout.cpp | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/headers/libs/alm/ALMLayout.h b/headers/libs/alm/ALMLayout.h index 687c1c4fbe..104eb68d16 100644 --- a/headers/libs/alm/ALMLayout.h +++ b/headers/libs/alm/ALMLayout.h @@ -170,7 +170,6 @@ private: bool _TrySolve(); LinearProgramming::LinearSpec* fSolver; - LinearProgramming::LinearSpec fOwnSolver; BReference fLeft; BReference fRight; diff --git a/src/libs/alm/ALMLayout.cpp b/src/libs/alm/ALMLayout.cpp index c2bc32c0f0..9abebd549f 100644 --- a/src/libs/alm/ALMLayout.cpp +++ b/src/libs/alm/ALMLayout.cpp @@ -13,7 +13,6 @@ #include -#include "ALMGroup.h" #include "RowColumnManager.h" #include "ViewLayoutItem.h" @@ -61,7 +60,8 @@ BALMLayout::BALMLayout(float hSpacing, float vSpacing, BALMLayout* friendLayout) fVSpacing(BControlLook::ComposeSpacing(vSpacing)), fBadLayoutPolicy(new DefaultPolicy()) { - fSolver = friendLayout ? friendLayout->Solver() : &fOwnSolver; + fSolver = friendLayout ? friendLayout->Solver() : new LinearSpec(); + fSolver->AcquireReference(); fRowColumnManager = new RowColumnManager(fSolver); fLeft = AddXTab(); @@ -86,6 +86,7 @@ BALMLayout::~BALMLayout() { delete fRowColumnManager; delete fBadLayoutPolicy; + fSolver->ReleaseReference(); }