From decd8a435d8fb15bab52eec9e447b176e33eb5cf Mon Sep 17 00:00:00 2001
From: Gilbert Gonzales <gilbert@lindenlab.com>
Date: Tue, 24 Jul 2012 14:42:28 -0700
Subject: CHUI-211: Problem was due to a non-heap variable being deleted and
 then referenced later (which was found by ProductEngine). Also the crash
 occurred at a specifc location llpangelobjectinventory::reset() during a
 static_cast, so now using a dynamic_cast as a safeguard.

---
 indra/llui/llfolderview.cpp              | 3 ++-
 indra/newview/llpanelobjectinventory.cpp | 7 ++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

(limited to 'indra')

diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index 8ade17b763..10729a3eae 100644
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -266,7 +266,8 @@ LLFolderView::~LLFolderView( void )
 	mItems.clear();
 	mFolders.clear();
 
-	delete mViewModel;
+	//product engine bugfix, prevent deletion of non-heap data
+	//delete mViewModel;
 	mViewModel = NULL;
 }
 
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index ca20051a51..937d3bb8c5 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1565,7 +1565,12 @@ void LLPanelObjectInventory::reset()
 	mFolders = LLUICtrlFactory::create<LLFolderView>(p);
 	// this ensures that we never say "searching..." or "no items found"
 	//TODO RN: make this happen by manipulating filter object directly
-	static_cast<LLInventoryFilter*>(mFolders->getFolderViewModel()->getFilter())->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+  	LLInventoryFilter* inventoryFilter = dynamic_cast<LLInventoryFilter*>(mFolders->getFolderViewModel()->getFilter());
+  	if(inventoryFilter)
+	{
+    	inventoryFilter->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+  	}
+  
 	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
 
 	if (hasFocus())
-- 
cgit v1.2.3