tdf#135639: check the return value of GetDim32
... to avoid crash accessing non-existing element of pChildItem->vIndices Change-Id: I248a9301abd69883f940051d9d9671298dcc8453 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100540 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
@@ -2128,43 +2128,46 @@ IMPL_LINK(WatchWindow, RequestingChildrenHdl, const weld::TreeIter&, rParent, bo
|
|||||||
int nParentLevel = bArrayIsRootArray ? pItem->nDimLevel : 0;
|
int nParentLevel = bArrayIsRootArray ? pItem->nDimLevel : 0;
|
||||||
int nThisLevel = nParentLevel + 1;
|
int nThisLevel = nParentLevel + 1;
|
||||||
sal_Int32 nMin, nMax;
|
sal_Int32 nMin, nMax;
|
||||||
pArray->GetDim32( nThisLevel, nMin, nMax );
|
if (pArray->GetDim32(nThisLevel, nMin, nMax))
|
||||||
for( sal_Int32 i = nMin ; i <= nMax ; i++ )
|
|
||||||
{
|
{
|
||||||
WatchItem* pChildItem = new WatchItem(pItem->maName);
|
for (sal_Int32 i = nMin; i <= nMax; i++)
|
||||||
|
|
||||||
// Copy data and create name
|
|
||||||
|
|
||||||
OUStringBuffer aIndexStr = "(";
|
|
||||||
pChildItem->mpArrayParentItem = pItem;
|
|
||||||
pChildItem->nDimLevel = nThisLevel;
|
|
||||||
pChildItem->nDimCount = pItem->nDimCount;
|
|
||||||
pChildItem->vIndices.resize(pChildItem->nDimCount);
|
|
||||||
sal_Int32 j;
|
|
||||||
for( j = 0 ; j < nParentLevel ; j++ )
|
|
||||||
{
|
{
|
||||||
sal_Int32 n = pChildItem->vIndices[j] = pItem->vIndices[j];
|
WatchItem* pChildItem = new WatchItem(pItem->maName);
|
||||||
aIndexStr.append(OUString::number( n )).append(",");
|
|
||||||
|
// Copy data and create name
|
||||||
|
|
||||||
|
OUStringBuffer aIndexStr = "(";
|
||||||
|
pChildItem->mpArrayParentItem = pItem;
|
||||||
|
pChildItem->nDimLevel = nThisLevel;
|
||||||
|
pChildItem->nDimCount = pItem->nDimCount;
|
||||||
|
pChildItem->vIndices.resize(pChildItem->nDimCount);
|
||||||
|
sal_Int32 j;
|
||||||
|
for (j = 0; j < nParentLevel; j++)
|
||||||
|
{
|
||||||
|
sal_Int32 n = pChildItem->vIndices[j] = pItem->vIndices[j];
|
||||||
|
aIndexStr.append(OUString::number(n)).append(",");
|
||||||
|
}
|
||||||
|
pChildItem->vIndices[nParentLevel] = i;
|
||||||
|
aIndexStr.append(OUString::number(i)).append(")");
|
||||||
|
|
||||||
|
OUString aDisplayName;
|
||||||
|
WatchItem* pArrayRootItem = pChildItem->GetRootItem();
|
||||||
|
if (pArrayRootItem && pArrayRootItem->mpArrayParentItem)
|
||||||
|
aDisplayName = pItem->maDisplayName;
|
||||||
|
else
|
||||||
|
aDisplayName = pItem->maName;
|
||||||
|
aDisplayName += aIndexStr;
|
||||||
|
pChildItem->maDisplayName = aDisplayName;
|
||||||
|
|
||||||
|
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pChildItem)));
|
||||||
|
|
||||||
|
m_xTreeListBox->insert(&rParent, -1, &aDisplayName, &sId, nullptr, nullptr, false,
|
||||||
|
xRet.get());
|
||||||
|
m_xTreeListBox->set_text(*xRet, "", 1);
|
||||||
|
m_xTreeListBox->set_text(*xRet, "", 2);
|
||||||
|
|
||||||
|
nElementCount++;
|
||||||
}
|
}
|
||||||
pChildItem->vIndices[nParentLevel] = i;
|
|
||||||
aIndexStr.append(OUString::number( i )).append(")");
|
|
||||||
|
|
||||||
OUString aDisplayName;
|
|
||||||
WatchItem* pArrayRootItem = pChildItem->GetRootItem();
|
|
||||||
if( pArrayRootItem && pArrayRootItem->mpArrayParentItem )
|
|
||||||
aDisplayName = pItem->maDisplayName;
|
|
||||||
else
|
|
||||||
aDisplayName = pItem->maName;
|
|
||||||
aDisplayName += aIndexStr;
|
|
||||||
pChildItem->maDisplayName = aDisplayName;
|
|
||||||
|
|
||||||
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pChildItem)));
|
|
||||||
|
|
||||||
m_xTreeListBox->insert(&rParent, -1, &aDisplayName, &sId, nullptr, nullptr, false, xRet.get());
|
|
||||||
m_xTreeListBox->set_text(*xRet, "", 1);
|
|
||||||
m_xTreeListBox->set_text(*xRet, "", 2);
|
|
||||||
|
|
||||||
nElementCount++;
|
|
||||||
}
|
}
|
||||||
if (nElementCount > 0 && !m_nUpdateWatchesId)
|
if (nElementCount > 0 && !m_nUpdateWatchesId)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user