summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@canonical.com>2011-05-22 15:14:40 +0200
committerBjoern Michaelsen <bjoern.michaelsen@canonical.com>2011-05-23 11:28:40 +0200
commitf25b836319678ab333a1a997cc7fdadfedad8e08 (patch)
tree2b72a6784de3c39ff17994c6873c29d60ce9bee7
parent1de9a489367e3bd0f9db6256b320b1224b2f4fa8 (diff)
fdo#35728: fix GridControl crash
* various forms.OGridControlModel tests segfaulted * root cause is the migration to stl containers in DbGridControl * the old tools container returned the removed pointer or NULL causing no failure * a signed int was used as index while the functions returned a unsigned int * the GRID_COLUMN_NOT_FOUND magic value was out of the signed range
-rw-r--r--svx/inc/svx/gridctrl.hxx2
-rw-r--r--svx/source/fmcomp/gridctrl.cxx14
2 files changed, 8 insertions, 8 deletions
diff --git a/svx/inc/svx/gridctrl.hxx b/svx/inc/svx/gridctrl.hxx
index 8187508501..48a938e1c2 100644
--- a/svx/inc/svx/gridctrl.hxx
+++ b/svx/inc/svx/gridctrl.hxx
@@ -116,7 +116,7 @@ public:
virtual void columnChanged() = 0;
};
-#define GRID_COLUMN_NOT_FOUND ((sal_uInt16)-1)
+#define GRID_COLUMN_NOT_FOUND SAL_MAX_UINT16
//==================================================================
// InitWindowFacet, describing which aspect of a column's Window to (re-)initialize
diff --git a/svx/source/fmcomp/gridctrl.cxx b/svx/source/fmcomp/gridctrl.cxx
index a6d4458991..66fd40f22d 100644
--- a/svx/source/fmcomp/gridctrl.cxx
+++ b/svx/source/fmcomp/gridctrl.cxx
@@ -1722,13 +1722,13 @@ sal_uInt16 DbGridControl::AppendColumn(const XubString& rName, sal_uInt16 nWidth
//------------------------------------------------------------------------------
void DbGridControl::RemoveColumn(sal_uInt16 nId)
{
- sal_Int16 nIndex = GetModelColumnPos(nId);
- DbGridControl_Base::RemoveColumn(nId);
-
- delete m_aColumns[ nIndex ];
- DbGridColumns::iterator it = m_aColumns.begin();
- ::std::advance( it, nIndex );
- m_aColumns.erase( it );
+ const sal_uInt16 nIndex = GetModelColumnPos(nId);
+ if(nIndex != GRID_COLUMN_NOT_FOUND)
+ {
+ DbGridControl_Base::RemoveColumn(nId);
+ delete m_aColumns[nIndex];
+ m_aColumns.erase( m_aColumns.begin()+nIndex );
+ }
}
//------------------------------------------------------------------------------